none
サーバーエラーについてご教示下さい。 RRS feed

  • 質問

  • こんにちわ。

     

    いつも大変お世話になっております。

     

    VS2005にてアプリケーションを作成して

    「WEBサイトの発行」でWEBサーバー上にアプリケーションを発行しました。

     

    そのアプリケーションをサーバー上で実行した所、以下のエラーが出ました。

     

    --------------------------------------------------------

     

    構成にエラーがあります。

     

    パーサーエラーメッセージ:アプリケーションレベルを超えて allowDefinition='MachineToApplication'として登録されているセクションを使うことはできません。このエラーは、仮想ディレクトリがIISでアプリケーションとして構成されなかった場合に発生します。

     

    ソースエラー:

     

    行24:             を有効にします。

    行25:-->

    行26:   <authentication mode="Forms">

    行27:       <forms name="formauth" loginurl="Login.aspx"

    行28:               <protection="All"  path="/" timeout="30">

     

     

    ---------------------------------------------------------

     

    サーバーはWindows2000です。

    アプリケーション化はアイコンで確認した所、できているようです。

     

    VS2005の開発環境では正常に実行されていました。

     

    解決策が分らずに困っております。

    どうかご教示お願い致します。

     

    2007年12月6日 1:04

回答

  •  紅茶王子 さんからの引用

    なんかおかしい気がしてきました。

     

    UserとPassをハードコーディングしても読めないのはおかしいですね。SQL Server認証でつながれているようですが、このつなぎ先が間違っているということはないでしょうか? 例えばテスト用のデータベースにつながっているなどです。
    サーバーエクスプローラで実際にサーバへ接続するデータ接続を作成し、そのプロパティを見ると接続文字列がわかりますから、それを使ってみるのも手です。

     

    また、sqlcmdを使ってSQL Server認証(UserとPassを指定)で接続し、そこでselect文を発行して正しく値が取れるかどうかの確認をしてみて下さい。

    2007年12月20日 17:00
    モデレータ

すべての返信

  • 発行した先の仮想フォルダがWebアプリケーションとして設定されているなら問題なさそうですけどね。

    ほかに何か設定で問題がありそうなところはありませんか?

    ASP.NET 2.0として動作させるための設定はサーバ上のIISの管理ツールから行わないといけないと思いますが、そのあたりは大丈夫でしょうか。

     

     

    2007年12月6日 2:27
  •  どっとねっとふぁん さんからの引用

     

    ASP.NET 2.0として動作させるための設定はサーバ上のIISの管理ツールから行わないといけないと思いますが、そのあたりは大丈夫でしょうか。

     

     

     

    どっとねっとふぁんさま

     

    ありがとうございます☆

     

    設定は問題ないと思いますが管理ツールからIISマネージャーで

    行っておりますがよろしかったでしょうか?

     

    他に何か思い当たる事象がありましたら教えて下さい。

    2007年12月6日 4:52
  • 皆様へ

     

    ご教示下さい。

    色々、調べてみると以下の掲示板を見つけました。

     

    http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=9986&forum=7&3

     

    確かにログインページはフォーム認証で作成してあり、他のaspxファイルは

    動くのですがこのログインページのみが上記のエラーが出ます。。。

     

    この掲示板にある

     

    > 「アプリケーション レベルを超えて allowDefinition='MachineToApplication'
    > として登録されているセクションを使うことはできません」
    これは結局、フォーム認証の設定はアプリケーション単位でしか出来ないよって言うエラーです。

     

    この部分って、どの様にすれば解決できるのでしょうか??

     

    勉強して間もなく理解ができなく恐縮ですがご教示下さい。

    お願い致します!

     

     

     

    2007年12月6日 10:14
  • 上記の掲示板の内容と今回の件とは直接関係ないと思います。また、仮想ディレクトリは特に作成する必要はありません。アプリケーションの作成により、アプリケーションのスタートポイントとして設定すればOKです。

     

    ところで回答済みになっていますが、どのように解決されたのか後学のために教えていただけませんでしょうか?

    2007年12月7日 2:33
    モデレータ
  •  trapemiya さんからの引用

     

    ところで回答済みになっていますが、どのように解決されたのか後学のために教えていただけませんでしょうか?

     

     

    trapemiyaさま

     

    ご回答ありがとうございます☆

    毎回、すみません。

     

    回答済みは間違ってつけたものだと思います。

     

    申し訳ありません。。。

     

    まだ解決しておりません・・・

     

    >アプリケーションの作成により、アプリケーションのスタートポイントとして設定すればOKです。

    この設定はどの様な工程で設定できるのでしょうか?

     

    お願い致します。

    2007年12月7日 2:47
  •  紅茶王子 さんからの引用

    回答済みは間違ってつけたものだと思います。


    了解です。


     紅茶王子 さんからの引用

    この設定はどの様な工程で設定できるのでしょうか?

     

    インターネットインフォメーションマネージャで、Webアプリケーションのフォルダを右クリックしてプロパティを開き、
    ディレクトリタブの「アプリケーションの設定」にある「作成」ボタンを押します。

    ただ、他のaspxのページが動いているということですし、問題なく作成されているんじゃないかと思います・・・。
    既に作成されていれば、「作成」ボタンは無く、代わりに「削除」ボタンになっています。

     

    あとは、Webアプリケーションのフォルダ以下にweb.configが二つ存在していたりしませんか? backupフォルダ内にweb.configのコピーがあり、それが原因になった例がありました。

     

    2007年12月7日 4:47
    モデレータ
  •  trapemiya さんからの引用

     

    既に作成されていれば、「作成」ボタンは無く、代わりに「削除」ボタンになっています。

     

     

    すでに削除ボタンとなっておりました。

     

     

     trapemiya さんからの引用

     

    あとは、Webアプリケーションのフォルダ以下にweb.configが二つ存在していたりしませんか? backupフォルダ内にweb.configのコピーがあり、それが原因になった例がありました。

     

     

    VS2005でビルドの発行をした後は触っておりませんでしたので

    確認した所、web.configは1つだけでした。。。

     

    他には理由は見当たりませんか?

     

    すみません。

    よろしくお願い致します。

    2007年12月7日 4:57
  • う~ん、現在、私が知っている限りは下の3つです。

     

    1.アプリケーションとして作成されていない。
    2.サブフォルダにweb.configがあり、それに関する適切な設定がされていない。
    3.バーチャルサーバとして構成してあり、それに関する適切な設定がされていない。

     

    (参考)
    You may receive the error "It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level" in asp.net
    http://geekswithblogs.net/ranganh/archive/2005/04/25/37609.aspx

     

    アプリケーションでサーバー エラー
    http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=2523&forum=7

    2007年12月7日 6:59
    モデレータ
  •  trapemiya さんからの引用

     

    (参考)
    You may receive the error "It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level" in asp.net
    http://geekswithblogs.net/ranganh/archive/2005/04/25/37609.aspx

     

    アプリケーションでサーバー エラー
    http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=2523&forum=7

     

     

    ありがとうございます☆

     

    1度しっかり読んでみて色々試してみます。

     

    回答が分ったらまた投稿します☆

     

    このフォームが表示の際にエラーが出るのもそうなのですが

    このフォーム自体、SQLServerを利用したログインができないのです。

     

    レコードにあるのですが・・・

     

    別スレッドを立ててお伺いした方がよろしいですよね??

    2007年12月7日 7:33
  • Web.Configの28行目の行頭って 『<』なのでしょうか?

    そうなると 全てのASPXページでエラーになると思いますが

     

    他のページでエラーにならないのは IE(ブラウザ)側のキャッシュで表示されているからなんてことはありませんか

     

     

    でもこれが原因なら 表示の中心が28行になるはずですし、外している可能性が高いですね

     

    検証方法として

    新規のWebプロジェクトを作成

    LoginPage.Aspxを追加

    web.configを編集して Form認証にする

      <authentication mode="Windows" />


      <authentication mode="Forms">
       <forms name="formauth" protection="All" loginUrl="Login.aspx" path="/" timeout="30"/>
      </authentication>
      <authorization>
       <deny users="?"/>
      </authorization>
    に変更

     

    URL/defualt.aspx にアクセスして login.aspxにリダイレクトされるかどうかを

    ローカルIISでテスト 、ターゲットサーバーへUploadしてテスト

    といった検証をしてみましょう

     

    2007年12月10日 5:01
  •  redfox63 さんからの引用

    Web.Configの28行目の行頭って 『<』なのでしょうか?

    そうなると 全てのASPXページでエラーになると思いますが

     

    他のページでエラーにならないのは IE(ブラウザ)側のキャッシュで表示されているからなんてことはありませんか

     

    ありがとうございます。

    キャッシュはすべてクリアしているのでないと思います。

     

     redfox63 さんからの引用

     

    検証方法として

    新規のWebプロジェクトを作成

    LoginPage.Aspxを追加

    web.configを編集して Form認証にする

      <authentication mode="Windows" />


      <authentication mode="Forms">
       <forms name="formauth" protection="All" loginUrl="Login.aspx" path="/" timeout="30"/>
      </authentication>
      <authorization>
       <deny users="?"/>
      </authorization>
    に変更

     

    URL/defualt.aspx にアクセスして login.aspxにリダイレクトされるかどうかを

    ローカルIISでテスト 、ターゲットサーバーへUploadしてテスト

    といった検証をしてみましょう

     

    教えて頂いた通り実行してみました。

     

    ローカルIISではlogin.aspxにリダイレクトされましたが

    サーバーへ発行後に実行するとmode属性をOffに設定して下さいと表示されたので

    Offにした所、投稿時のエラーとなりました。

    もともとlogin.aspxがエラーが出るのでリダイレクトしてもエラーのままと言った感じだと思われます。

     

    ただ、サーバーに発行したフォルダのweb.configを削除するとlogin.aspxはエラーなしで表示されます。

     

    2007年12月10日 7:37
  •  紅茶王子 さんからの引用
     

    ローカルIISではlogin.aspxにリダイレクトされましたが

    サーバーへ発行後に実行するとmode属性をOffに設定して下さいと表示されたので

    Offにした所、投稿時のエラーとなりました。

    もともとlogin.aspxがエラーが出るのでリダイレクトしてもエラーのままと言った感じだと思われます。

     

    ただ、サーバーに発行したフォルダのweb.configを削除するとlogin.aspxはエラーなしで表示されます。

     

    mode属性を『Off』に設定ですか?

    modeの設定値は『Windows』『Forms』『Passport』『None』だと思いますが

     

    試しに 認証設定部分をコメントアウトした場合 login.aspxが表示可能なのでしょうか

    コード ブロック
      <authentication mode="Forms">
       <forms name="formauth" protection="All" loginUrl="Login.aspx" path="/" timeout="30"/>
      </authentication>
      <authorization>
       <deny users="?"/>
      </authorization>

    部分を

    コード ブロック

    <!--

      <authentication mode="Forms">
       <forms name="formauth" protection="All" loginUrl="Login.aspx" path="/" timeout="30"/>
      </authentication>
      <authorization>
       <deny users="?"/>
      </authorization>

    -->

     

    といった具合にして確認してみましょう
    これでうまく表示出来ないのであれば IIS側の設定とかが問題なのかも

     

    サイトの新規構築の再の手順はどのようにしましたか

    サーバーのサイトパスは wwwrootの配下なのでしょうか

    2007年12月10日 10:33
  • もしかして 『customErrors』のmodeをOffに設定してくれと表示されたのではないでしょうか

    そうであるなら 追加した認証設定の属性名などが間違っているのではないかと思います

    当方の環境で 『loginUrl』を『loginurl』などと記述した際に上記のメッセージが表示されました

     

    2007年12月10日 10:55
  •  redfox63 さんからの引用

    mode属性を『Off』に設定ですか?

    そうです。

    アプリケーションでサーバーエラーが発生しました。

    <customErrors>タグで"mode"属性を"Off"に設定してください。

    と出ましたので<customErrors "mode"="Off />と追記した所、投稿時のエラーになりました。

     

    今は消してあります。

     redfox63 さんからの引用

     

    試しに 認証設定部分をコメントアウトした場合 login.aspxが表示可能なのでしょうか

     

    表示は可能でした。

     

    新規構築の手順はVS2005の「Webサイトの発行」で行いました。

     

     redfox63 さんからの引用

    当方の環境で 『loginUrl』を『loginurl』などと記述した際に上記のメッセージが表示されました

     

    一応確認しましたが問題なさそうでした。

    VS2005のインテリセンス機能で作成したので大丈夫だと思うのですが・・・

     

    2007年12月11日 0:31
  • 一応、現在のweb.configの中身を投稿いたします。

     

    <?xml version="1.0 encoding="utf-8"?>

    <configuration>

    <appSettings/>

    <connectionStrings/>

    <system.web>

         <compilation debug="false" />

    <authentication mode="Forms">  ←------------------

        <forms name="formauth" protection="All" loginUrl="Login.aspx" path="/" timeout="30" />

    </authentication>

    <authorization>

    <deny users="?" />

    </authorization>

    </system.web>

    </configuration>

     

    エラーは←------------------の部分が赤くなって表示されます。

    印刷したものを手打ちで投稿しましたので間違えている部分がある場合もあります。

     

    宜しくお願い致します。

     

     

     

    2007年12月11日 1:54
  • 何度もすみません。。。

     

    Machine.configの<CustomErrors~の部分は一切触ってないのですが

    そこは触らなくても大丈夫なのでしょうか?

     

    よろしくお願い致します。

     

    2007年12月11日 5:31
  • これが原因かどうかわかりませんが、Login.aspxという名前はあまりよろしくなかった記憶があります。

     

    ログインのランタイムエラーについて
    http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=635180&SiteID=7

    2007年12月11日 7:14
    モデレータ
  •  trapemiya さんからの引用

    これが原因かどうかわかりませんが、Login.aspxという名前はあまりよろしくなかった記憶があります。

     

    ログインのランタイムエラーについて
    http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=635180&SiteID=7

     

    ありがとうございます。

    試しにCheck.aspxでweb.configも書き換えてみましたが

    出るエラーは同じでした。。。

     

    ただ、妙な現象が起きます。

    Login.aspxをCheck.aspxに書き換えたのに

    URLの最後をLogin.aspxと入力すると「削除されたか見つかりません」では

    なく同じエラーが出ます。

     

    Login.aspxはそのフォルダに存在しません。

    キャッシュの問題でしょうか?

     

    何度もお手数ですが宜しくお願い致します。

    2007年12月11日 7:28
  • とりあえず、通常以下にある当該の「アプリケーション名」というフォルダを削除し、ソリューションのリビルドをしてみるとどうなりますでしょうか?

     

    C:\Windows\Microsoft.NET\Framework\バージョン\Temporary ASP.NET Files\アプリケーション名

    2007年12月11日 8:47
    モデレータ
  •  trapemiya さんからの引用

    とりあえず、通常以下にある当該の「アプリケーション名」というフォルダを削除し、ソリューションのリビルドをしてみるとどうなりますでしょうか?

     

    C:\Windows\Microsoft.NET\Framework\バージョン\Temporary ASP.NET Files\アプリケーション名

     

    ありがとうございます。

     

    現在、訳あってVWDを使用しています。

    VWDではソリューションのリビルドができない様です・・・

     

    他の方法がありましたらご教示下さい。

     

    すみません。

    よろしくお願い致します。

    2007年12月11日 10:28
  •  trapemiya さんからの引用

    とりあえず、通常以下にある当該の「アプリケーション名」というフォルダを削除し、ソリューションのリビルドをしてみるとどうなりますでしょうか?

     

    C:\Windows\Microsoft.NET\Framework\バージョン\Temporary ASP.NET Files\アプリケーション名

     

    Visual Studio 2005 Team Suiteの試用版でもできますでしょうか??

    ご回答よろしくお願い致します。

    2007年12月12日 10:33
  • 問題を切り分けるために単純なことからやり直す方が早いかもしれません。ログイン認証画面が開くだけの単純なプロジェクトを作成し、それをWeb発行して動作確認してみて下さい。もし、動かなければ、その時のweb.configや、サーバー上に配置されたファイルの構成を教えて下さい。私の方でも試してみたいと思います。

    2007年12月12日 12:19
    モデレータ
  •  trapemiya さんからの引用

    問題を切り分けるために単純なことからやり直す方が早いかもしれません。ログイン認証画面が開くだけの単純なプロジェクトを作成し、それをWeb発行して動作確認してみて下さい。もし、動かなければ、その時のweb.configや、サーバー上に配置されたファイルの構成を教えて下さい。私の方でも試してみたいと思います。

     

    ありがとうございます。

    VS2005 90日間の評価版をダウンロードしインストールするまでに

    時間がかかってしまいご回答が遅れました。

     

    どうしていいか分らず落ち込んでおりました。

    trapemiyaさまの心強いお言葉感謝致します。

     

    VS2005 proでローカルにページを作成しました。

    その際にweb.configも新しく作成しました。

    WEBサイトの発行後にLoginPage.aspxを実行した所

        <system.web>
            <compilation debug="false" />

        <custom Errors mode="Off"/> 
            <authentication mode="Windows" />
        </system.web>
    </configuration>

    同じエラーが表示されました。

    <custom Errors mode="Off"/>はエラー確認後に追記してエラー詳細を見ました。

     

    ただ、web.comfigを配置しない場合LoginPage.aspxは表示されます。

    宜しくお願い致します。

     

    ---------------------------------------------------ログインページ(LoginPage.aspx)-----------------------------------------

    <%@ Page Language="C#" %>
    <html>
    <head>
    <script runat="server">
    void login_Click(object sender, EventArgs e) {
      if (FormsAuthentication.Authenticate(tbUsername.Text, tbPassword.Text)) {
        FormsAuthentication.RedirectFromLoginPage(tbUsername.Text,persist.Checked);
        Response.Redirect("Main.aspx");
         
      } else {
        Message.Text = "失敗しました。パスワードを確認してください";
      }
    }

    </script>
    </head>
    <body>
      <form id="Form1" runat="server">
        <p>UserName : <asp:TextBox id="tbUsername" runat="server" /></p>
        <p>Password : <asp:TextBox id="tbPassword" TextMode="Password" runat="server" /></p>
        <p>
          <asp:CheckBox id="persist"
            Text="認証情報を記憶する" runat="server"/>
          <asp:Button id="login" Text="ログイン"
            OnClick="login_Click" runat="server" />
        </p>
        <p><asp:Label id="Message" ForeColor="red" runat="server" /></p>
      </form>
    </body>
    </html>

    -------------------------------------------------------------------------------------------------------------------------

     

    ---------------------------------------------web.config-------------------------------------------------------------

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <appSettings/>
        <connectionStrings/>
        <system.web>
            <compilation debug="false" />
            <authentication mode="Windows" />
        </system.web>
    </configuration>

     

    -------------------------------------------------------------------------------------------------------------------------

     

    -----------------------------------------------machine.config(custom Error部分)--------------------------

     

    <section name="customErrors" type="System.Web.Configuration.CustomErrorsSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

    --------------------------------------------------------------------------------------------------------------------------

    2007年12月14日 3:57
  • 現在、家におりますのでサーバーの環境がなく、ローカルマシンのIISに対してWeb発行しました。特に問題なく動いています。ご提示されたソースをそのままコピーして使っています。ただし、LoginPage.aspxという名前はLogin.aspxに変えています。この名前で大丈夫なことを一応確認したかったものですから。

    とりあえず、Web発行されたフォルダの構造を以下に書きますので、比べてみて下さい。

     

    c:\Inetpub\wwwroot\WebSiteTest20--+--bin--App_Web_default.aspx.cdcab7d2.dll
                                                        |
                                                        +--Login.aspx
                                                        |
                                                        +--PrecompiledApp.confg
                                                        |
                                                        +--Web.config

     

    以上、4つのファイルしかありません。

    2007年12月14日 17:27
    モデレータ
  •  trapemiya さんからの引用

    現在、家におりますのでサーバーの環境がなく、ローカルマシンのIISに対してWeb発行しました。特に問題なく動いています。ご提示されたソースをそのままコピーして使っています。

    trapemiyaさま

     

    どうもありがとうございます。

    早速、Cドライブに任意のフォルダを作成してVS2005にてaspxを作成して

    アプリケーション化されているフォルダにWebサイトの発行を行ってみました。

     

    http://localhost/~のURL実行でよろしいのですよね?

     

    実行結果は 「昨日、3:57 午後」と同じエラーがでました。

     

    今までVS2005のF5実行ではうまくいっていたのですが、ローカルでの実行は初めて

    でした。

     

    VS2005のF5実行は開発サーバーなのでうまくいって当たり前なのですね・・・

     

     trapemiya さんからの引用

    とりあえず、Web発行されたフォルダの構造を以下に書きますので、比べてみて下さい。

     

    c:\Inetpub\wwwroot\WebSiteTest20--+--bin--App_Web_default.aspx.cdcab7d2.dll
                                                        |
                                                        +--Login.aspx
                                                        |
                                                        +--PrecompiledApp.confg
                                                        |
                                                        +--Web.config

     

    以上、4つのファイルしかありません。

    フォルダは4つでtrapemiyaさまと同じです。

     

    binフォルダの中には「App_Web_a4w-x6xy.dll」という名前の

    ファイルがありました。

     

    ここは問題ないのでしょうか?

     

    これが問題なければ環境でしょうか??

     

     

    -----------------------------------------------現在までの状況です-----------------------------------------------

    同じ、ソースのアプリケーションでVS2005のF5実行は正常に稼動する(開発サーバーがあるからですね?)

    投稿途中に「ローカルでは表示されるがWebサーバーでは動かない」と投稿してしまいましたが

    間違えておりました。。。

    VS2005の中では動きますが、ローカル及びWEBサーバーにて実行すると「昨日、3:57 午後」と同じエラーがでます。

    やはりweb.configを削除すると双方ともエラーなく表示されます。

     

    何度もお手数ですがよろしくご回答お願い致します。

    2007年12月15日 7:18
  •  紅茶王子 さんからの引用

     http://localhost/~のURL実行でよろしいのですよね?

     

    そう言えば、ローカルなIISにWeb発行する場合、localhostを使用すると、つまり、
    http://localhost/webアプリケーション名
    とすると、うまく発行できないバグがあったと思います。この場合、
    http://コンピュータ名/webアプリケーション名
    とするか、
    http://127.0.0.1/webアプリケーション名
    とすればOKです。また
    C:\Inetpub\wwwroot\アプリケーション名
    のようにしてもOKです。

     

     紅茶王子 さんからの引用

    実行結果は 「昨日、3:57 午後」と同じエラーがでました。

    このエラーというのは、一番最初にご提示されているエラーと同じなんですよね?

     

     紅茶王子 さんからの引用

    binフォルダの中には「App_Web_a4w-x6xy.dll」という名前の

    ファイルがありました。

     

    ここは問題ないのでしょうか?


    問題ないでしょう。

     

     紅茶王子 さんからの引用

    これが問題なければ環境でしょうか??


    ローカルなIISと他のサーバーでも全く同じエラーが出るわけですから、環境というわけでもなさそうですね。web.configも特に問題なさそうな気がしますが、念のため、ソリューションエクスプローラで右クリックして「新しい項目の追加」 -> 「web構成ファイル」で作成されたweb.configで試してみて下さい。

    あとは、インターネットインフォメーションマネージャで当該のwebサイトを選択し、そのプロパティのASP.NETタブでASP.NET2.0が選択されているか確認してみて下さい。ご提示されたweb.configはASP.NET1.1では動きませんので。

    2007年12月15日 17:07
    モデレータ
  • trapemiyaさま

     

    幾度のご教示ありがとうございます。

     

     trapemiya さんからの引用

    http://コンピュータ名/webアプリケーション名
    とするか、
    http://127.0.0.1/webアプリケーション名
    とすればOKです。また
    C:\Inetpub\wwwroot\アプリケーション名
    のようにしてもOKです。

     

    全て試してみましたが同じエラーが出ます。。。

     

     trapemiya さんからの引用

     

    このエラーというのは、一番最初にご提示されているエラーと同じなんですよね?

     

     

    --------------------------------------------------------

     

    構成にエラーがあります。

     

    パーサーエラーメッセージ:アプリケーションレベルを超えて allowDefinition='MachineToApplication'として登録されているセクションを使うことはできません。このエラーは、仮想ディレクトリがIISでアプリケーションとして構成されなかった場合に発生します。

     

    ソースエラー:

     

    行24:             を有効にします。

    行25:-->

    行26:   <authentication mode="Windows"  />

    行27:       <--

    行28:               <customErrors>セクションは、要求の実行中にハンドル

     

    ---------------------------------------------------------

     

    こちらがエラーです。

     

     trapemiya さんからの引用

    ローカルなIISと他のサーバーでも全く同じエラーが出るわけですから、環境というわけでもなさそうですね。web.configも特に問題なさそうな気がしますが、念のため、ソリューションエクスプローラで右クリックして「新しい項目の追加」 -> 「web構成ファイル」で作成されたweb.configで試してみて下さい。

    あとは、インターネットインフォメーションマネージャで当該のwebサイトを選択し、そのプロパティのASP.NETタブでASP.NET2.0が選択されているか確認してみて下さい。ご提示されたweb.configはASP.NET1.1では動きませんので。

     

    念のため、web.config・Login.aspxも全て作り直して再発行してみましたが、結果は上記と同じです・・・

     

    プロパティのASP.NETタブは「2.0.50727」が選択されていました。

     

    もうお手上げ状態かもしれませんが宜しくお願い致します。

     

    2007年12月17日 0:47
  • machine.configの問題かもしれませんね。もし、いじられているようでしたら、一度元に戻してみて下さい。

    戻せないようでしたら、machine.config.defaultにデフォルトの設定がありますから、それをmachine.configにコピーしてみて下さい。
    2007年12月17日 16:29
    モデレータ
  •  trapemiya さんからの引用

    machine.configの問題かもしれませんね。もし、いじられているようでしたら、一度元に戻してみて下さい。

    戻せないようでしたら、machine.config.defaultにデフォルトの設定がありますから、それをmachine.configにコピーしてみて下さい。

     

    ありがとうございます。

    何度も申し訳ありません。

     

    machine.config.defaultの名前をmachine.configに変更してコピーしてみましたが

    解消されませんでした。

     

    フルリカバリした端末を2台用意して設定して実行してみたのですが

    全て同じエラーが出ます。

     

    インストールプログラムもしくは設定が違うのでしょうか?

     

    調べて行ったので足りないものはないと思いますが

    一応、見て頂けますでしょうか?

     

    ------------インストール済みのプログラム------------

    Microsoft .NET Framework 2.0

    Microsoft .NET Framework 2.0 日本語 Language Pack

    Microsoft .NET Framework 2.0 SDK -日本語

    Visual Studio 2005 Pro 既定インストール

     

    2007年12月18日 1:04
  •  紅茶王子 さんからの引用

    調べて行ったので足りないものはないと思いますが

    一応、見て頂けますでしょうか?

     

    特に問題ないです。

     

    状況を整理します。
    ・紅茶王子さんが提示されたソース(web.config含む)で私のところでは問題なく動いた。
    ・machine.configもデフォルトに戻った。
    ・紅茶王子さんのところで複数の端末で同じエラーが発生する。

    上記から考えて、残るのは紅茶王子さんのところの環境ぐらいだと思うのですが、何か特殊なソフトが入っていませんでしょうか? 例えば、以下のようなこともありました。

     

    新しいプロジェクトが作成できない(Webアプリケーション)
    http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-22917.htm

    2007年12月18日 1:56
    モデレータ
  •  trapemiya さんからの引用

    状況を整理します。
    ・紅茶王子さんが提示されたソース(web.config含む)で私のところでは問題なく動いた。
    ・machine.configもデフォルトに戻った。
    ・紅茶王子さんのところで複数の端末で同じエラーが発生する。

     

    ご回答ありがとうございます。

    状況の認識は一致しております。

     

    特殊なソフトはないようです。

    干渉しないようにOSのみにしましたので。

     

    おそらく環境ですね・・・

     

    何度もご回答頂きましてありがとうございます。

    2007年12月18日 2:29
  • う~ん、しつこく確認ですが、以下のWebSiteTest20のようになっているんですよね?


     

    #上の画像は、インターネットインフォメーションサービスで、Webアプリケーションのプロパティを表示し、Webアプリケーション名が入り、その右横のボタンが削除になっていることを表示しています。

    2007年12月18日 15:19
    モデレータ
  •  trapemiya さんからの引用

    う~ん、しつこく確認ですが、以下のWebSiteTest20のようになっているんですよね?


    trapemiyaさま

     

    ありがとうございます。

     

    表示できました!

     

    経緯は一旦リカバリしました。

    IISをインストール後にFreameworkをインストール

    フォルダを作成しaspxファイルを配置。

     

    仮想ディレクトリ作成の際にtrapemiyaさまの

    添付画像を見て、分かったのですが

     

    test\web\appli(aspxファイル配置)というディレクトリがあったとします。

     

    testで仮想ディレクトリをアプリケーション化していたのですが

    下の階層のappliもアプリケーション化した所、表示されました。

     

    長い期間、ご教示頂き原因が当方の環境設定であった事が申し訳なくて仕方ありません。

     

    根気強く教えて下さって本当に感謝しております!

    助かりました、心からありがとうございました。

    2007年12月19日 9:30
  • trapemiyaさま

     

    何度も申し訳ありません。

    この投稿のLoginフォームは表示テスト用で

    以下のコードが本物です。

     

    Table内のUser,Pass が一致して尚且つ、AuthorityがCodeという条件だけの

    ユーザーを認証成功としたいのですがどうしても認証してくれないのです。

    どこが違うかだけでもアドバイス頂けませんでしょうか?

     

    データベースには確かにその抽出条件にHITするレコードがあるのですが

    ログイン失敗になってしまいます。

     

    最後の最後に申し訳ないのですがお願い致します。

    コードはスクリプト部分のみです。

     

    <%@ Page ContentType="text/html" Language="C#" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %>

    <html>
    <head>
    <script runat="server">
       
       
    void objBtn_Click(Object sender, EventArgs e) {
      // 入力されたユーザーID、パスワードでusrテーブル内のレコードを検索
        SqlConnection objDb = new SqlConnection("server=web;database=Source;uid=id;pwd=pw");

        SqlCommand objCom = new SqlCommand("SELECT User,Pass Table WHERE User=@uid AND Pass=@passwd AND Authority=Code", objDb);
       
      objCom.Parameters.Add("@uid",txtUsr.Text);

      objCom.Parameters.Add("@passwd", txtPass.Text);

        
      objDb.Open();
      SqlDataReader objDr=objCom.ExecuteReader();
       
      if(objDr.Read()){
     
        // 検索の結果、該当するレコードが存在した場合、認証は成功
        FormsAuthentication.RedirectFromLoginPage(txtUsr.Text,false);

        Response.Redirect("Main.aspx");
         
      }else{
         
        objLbl.Text="正しいユーザーID、パスワードを入力してください";
      }
      objDb.Close();
    }

     

    2007年12月19日 9:42
  •  紅茶王子 さんからの引用

    表示できました!

    よかったです!

     

     紅茶王子 さんからの引用

    添付画像を見て、分かったのですが

     

    添付画像は最後の手段なんです。添付画像はわんくま同盟のサーバーに置いているんですが、ここから画像を削除してしまうと、後日、この掲示板を見た人には見えなくなってしまいますから。
    なので少し文章で補足しておきました。

     

     紅茶王子 さんからの引用

    test\web\appli(aspxファイル配置)というディレクトリがあったとします。

     

    testで仮想ディレクトリをアプリケーション化していたのですが

    下の階層のappliもアプリケーション化した所、表示されました。

     

    結局、ただのサブディレクトリにweb.configがあったのが原因だったようですね。この場合、appliのみを仮想ディレクトリにするか、web.configをtestに置いても動くでしょう。

     

    最終的には、原因は仮想ディレクトリなどのWebアプリケーションの作り方だろうと思ったのですが、こういうパターンでもご提示されたエラーが発生するのですね。こちらこそ良い経験となり、勉強になりました。

    2007年12月19日 15:31
    モデレータ
  •  紅茶王子 さんからの引用

    データベースには確かにその抽出条件にHITするレコードがあるのですが

    ログイン失敗になってしまいます。

     

    まず、

     

    objCom.Parameters.Add("@uid",txtUsr.Text);

     

    は、互換性のために残されていますので、

     

    objCom.Parameters.AddWithValue("@uid",txtUsr.Text);

     

    を使うようにして下さい。

     

    さて、ログイン失敗というのはどこで失敗しているのでしょうか?
    データベースは何でしょうか? データベースが見つからないのかもしれませんし、レコードが読めないのかもしれません。
    想像するに、データベースが見つからなければそういったメッセージが表示されますので、たぶん、データベースには接続ができているんじゃないかとは思います。

    気になるところと言えば、

     

    SqlCommand objCom = new SqlCommand("SELECT User,Pass Table WHERE User=@uid AND Pass=@passwd AND Authority=Code", objDb);

     

    における、Authority=Code です。これではCode列ということになってしまいます。Codeという文字列と比較したいのであれば、Authority='Code' です。

    2007年12月19日 16:02
    モデレータ
  • trapemiyaさま

     

    度々のご教授申し訳ありません。

     

     trapemiya さんからの引用

     

    objCom.Parameters.Add("@uid",txtUsr.Text);

     

    は、互換性のために残されていますので、

     

    objCom.Parameters.AddWithValue("@uid",txtUsr.Text);

     

    を使うようにして下さい。

     

     

    なるほど。

    objCom.Parameters.Addの部分は変更致しました。

     

     trapemiya さんからの引用

     

    さて、ログイン失敗というのはどこで失敗しているのでしょうか?
    データベースは何でしょうか? データベースが見つからないのかもしれませんし、レコードが読めないのかもしれません。
    想像するに、データベースが見つからなければそういったメッセージが表示されますので、たぶん、データベースには接続ができているんじゃないかとは思います。

    データベースでレコードがない場合はID・PWが間違えていますとLabelが出るなっているのですが

    レコードが見つからないのでこのラベルが表示されるのだと思います。

     

    接続失敗のエラーもないので接続はできている様です。

     

    データベースはSQLServerです。

     

    ACCESSのクエリで同じ条件を元に抽出をかけた所、レコードはあるのですが

    フォーム上では見つからないのかID・PWが間違えていますとLabelが出てしまう状態です。

     

     trapemiya さんからの引用

    気になるところと言えば、

     

    SqlCommand objCom = new SqlCommand("SELECT User,Pass Table WHERE User=@uid AND Pass=@passwd AND Authority=Code", objDb);

     

    における、Authority=Code です。これではCode列ということになってしまいます。Codeという文字列と比較したいのであれば、Authority='Code' です。

    そうでした。

    基本的な所でした。。。

     

    ここを修正しても同じエラーでした。

    他に気になる部分ありますでしょうか?

    よろしくお願いいたします。

     

     

     

    2007年12月20日 2:01
  •  紅茶王子 さんからの引用

    SqlCommand objCom = new SqlCommand("SELECT User,Pass Table WHERE User=@uid AND Pass=@passwd AND Authority=Code", objDb);

     

    見逃していましたが、fromがありません。でも、これだと実行時にエラーになりそうな気もしますが・・・

     

    SELECT User,Pass from Table WHERE User=@uid AND Pass=@passwd AND Authority='Code'

    2007年12月20日 4:47
    モデレータ
  •  trapemiya さんからの引用

    見逃していましたが、fromがありません。でも、これだと実行時にエラーになりそうな気もしますが・・・

     

    SELECT User,Pass from Table WHERE User=@uid AND Pass=@passwd AND Authority='Code'

     

    すみません。

    「from」は書き漏れでした。。。

     

    実際のコードには存在します。

     

    すみません。

     

    では他には問題ないと言う事ですね・・・

     

    2007年12月20日 5:35
  • 一応ですが、フルソースです。

     

    <%@ Page ContentType="text/html" Language="C#" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %>


    <script runat="Server">


    void objBtn_Click(Object sender, EventArgs e) {
            // 入力されたユーザーID、パスワードでusrテーブル内のレコードを検索
            SqlConnection objDb = new SqlConnection("server=ServerName;database=DataSource;uid=id;pwd=pw");

            SqlCommand objCom = new SqlCommand("SELECT User,Pass FROM Table WHERE User=@uid AND Pass=@passwd AND Authority='Code'", objDb);
       
            objCom.Parameters.AddWithValue("@uid",txtUsr.Text);

            objCom.Parameters.AddWithValue("@passwd", txtPass.Text);
       
            objDb.Open();
            SqlDataReader objDr=objCom.ExecuteReader();
       
        if(objDr.Read()){
     
            // 検索の結果、該当するレコードが存在した場合、認証は成功
            FormsAuthentication.RedirectFromLoginPage(txtUsr.Text,false);

            Response.Redirect("Main.aspx");
         
      }else{
         
        objLbl.Text="正しいユーザーID、パスワードを入力してください";
      }
      objDb.Close();
    }
    </script>
    <html>
    <head>
    <title>データWEB ログイン</title>
    </head>
    <body>
      <form id="Form1" runat="server">
          <span style="font-size: 16pt">
                <span style="color: #6666ff">データWEB</span>
            <br />
          </span>
        <p>UserName : <asp:TextBox id="txtUsr" runat="server" /></p>
        <p>Password : <asp:TextBox id="txtPass" TextMode="Password" runat="server" /></p>
        <p>
          <asp:Button id="objBtn" Text="ログイン"
            OnClick="objBtn_Click" runat="server" />
        </p>
        <p><asp:Label id="objLbl" runat="Server" ForeColor="Red" /></p>
      </form>
    </body>
    </html>

     

    宜しくお願い致します。

     

    2007年12月20日 5:50
  • いろいろ絞っていくしかありません。

    まず、デバッグ実行を行い、下記をブレークポイントで止めて、txtUsr.Text, txtPass.Textの値がきちんと入っているか確認して下さい。

     

           objCom.Parameters.AddWithValue("@uid",txtUsr.Text);

           objCom.Parameters.AddWithValue("@passwd", txtPass.Text);

    値が入っているのであれば、

     

    SELECT User,Pass FROM Table WHERE User=@uid AND Pass=@passwd

     

    として、AND Authority='Code' を省いてみてください。

     

    あとは、

     

    SELECT User,Pass FROM Table WHERE User='hoge' AND Pass='fuga'

     

    のようにハードコーディングしてみて下さい。

    2007年12月20日 6:42
    モデレータ
  •  trapemiya さんからの引用

    いろいろ絞っていくしかありません。

    まず、デバッグ実行を行い、下記をブレークポイントで止めて、txtUsr.Text, txtPass.Textの値がきちんと入っているか確認して下さい。

     

           objCom.Parameters.AddWithValue("@uid",txtUsr.Text);

           objCom.Parameters.AddWithValue("@passwd", txtPass.Text);

    値が入っているのであれば、

     

    SELECT User,Pass FROM Table WHERE User=@uid AND Pass=@passwd

     

    として、AND Authority='Code' を省いてみてください。

     

    あとは、

     

    SELECT User,Pass FROM Table WHERE User='hoge' AND Pass='fuga'

     

    のようにハードコーディングしてみて下さい。

    trapemiyaさま

     

    ありがとうございます。

     

    txtUsr.Text・txtPass.Textのいずれも値は入っている様です。

     

     

    しかし、上記のどれを行っても

     

    }else{
         
        objLbl.Text="正しいユーザーID、パスワードを入力してください";←--------------------
      }

     

    ←--------------------に行ってしまいます。

     

    なんかおかしい気がしてきました。

    2007年12月20日 7:40
  •  紅茶王子 さんからの引用

    なんかおかしい気がしてきました。

     

    UserとPassをハードコーディングしても読めないのはおかしいですね。SQL Server認証でつながれているようですが、このつなぎ先が間違っているということはないでしょうか? 例えばテスト用のデータベースにつながっているなどです。
    サーバーエクスプローラで実際にサーバへ接続するデータ接続を作成し、そのプロパティを見ると接続文字列がわかりますから、それを使ってみるのも手です。

     

    また、sqlcmdを使ってSQL Server認証(UserとPassを指定)で接続し、そこでselect文を発行して正しく値が取れるかどうかの確認をしてみて下さい。

    2007年12月20日 17:00
    モデレータ
  •  trapemiya さんからの引用

    SQL Server認証でつながれているようですが、このつなぎ先が間違っているということはないでしょうか? 例えばテスト用のデータベースにつながっているなどです。

    何度も確認しましたが問題ありませんでした。

     

    違うフォームにて同じ接続文字列でINSERTなどを行っておりますので・・・

     

     trapemiya さんからの引用

    また、sqlcmdを使ってSQL Server認証(UserとPassを指定)で接続し、そこでselect文を発行して正しく値が取れるかどうかの確認をしてみて下さい。

     

    すみません。

    このsqlcmdが分かりませんでした。

     

    SQL Serverのsqlcmd.exeではなくてコードに書いて

    値を確かめるという事でしょうか?

     

    もしそうでしたらsqlcmdの使用方法のある

    参考サイトありますでしょうか?

     

    探してみたのですがなかったので困っていました。

     

    2007年12月21日 2:21
  • trapemiyaさま

     

    まだ分かっていないのですが

    テーブルのカラム名が原因のような気がします。

     

    DataBindで同じ条件のフォームを作成しました。

    Passはカラム名が「Pass」になっているのに対して

    Userは「Column1」となっていました。

     

    Userと違うカラムを入れ替えて表示されると「Column1」は入れ替えた

    正規のカラム名になりました。

     

    少しお時間下さい。

    分かりましたらご報告致します。

     

    2007年12月21日 9:39
  • Where句を省略してもエラーになるのでしょうか

    そうなら 接続しているテーブルが違うなど別のところに原因がありそうです

    これでエラーが出ないならIDを追加

    PASSを追加

    Authority='Code'を追加

    などを順次条件を追加して何処が悪いのかを潰していきましょう

    2007年12月22日 5:38
  • trapemiyaさま

    redfox63さま

     

    ありがとうございます。

     

    予想が当たりました。

     

    カラムがネックだったようです。

     

    よってコードを

       SqlCommand objCom = new SqlCommand("SELECT User,Pass Table WHERE UserCode=@uid AND UserPw=@passwd AND Authority=Code", objDb);
       
      objCom.Parameters.Add("@uid",txtUsr.Text);

      objCom.Parameters.Add("@passwd", txtPass.Text);

     

    とテーブルのカラムを変更した事で期待通りの実行ができました!

     

    カラムで動きが左右されるとは思っていませんでした・・・

     

    しかし、結果原因が判明したのでよかったです。

     

    trapemiyaさま

     

    1度ならぬ2度ご教示頂きましてありがとうございました。

     

    ご教示下さいました皆様ありがとうございました。

     

     

    2007年12月25日 0:57
  • あ~、そうか、うっかりしていました。気付かずにごめんなさい。[user]みたいに括弧で囲えば大丈夫ですが、列名を変えた方が良いですね。それにしても動いて何よりです。また、解決されておみごとです。

     

    Jet 4.0 の予約語の一覧
    http://support.microsoft.com/kb/248738/ja

    2007年12月25日 1:26
    モデレータ
  •  trapemiya さんからの引用

    あ~、そうか、うっかりしていました。気付かずにごめんなさい

     

    とんでもございません。

     

    知識不足であった当方の責任もあります。

     

    ご教示頂きました事、本当に感謝致します。

    ありがとうございました。

     

    教えて頂いた予約語のサイト参考にさせて頂きます。

     

    2007年12月25日 1:37