1

この問題により、私たちの何人かはオフィスで困惑しています。私たちは皆、ASP.NET アプリを Web ファームに展開するのは初めてであり、アイデアが思い浮かびません。

Web ファームがあり、アプリケーションはそれらすべてにコピーされます。しかし、私たちは問題を抱えています..

から設定を取得しようとすると、例外がスローされますappSettings。さらに調査すると、ノードは実際にはローカルを使用しておらず、.NET フレームワーク フォルダー内のWeb.ConfigにフォールバックしてWeb.Configいることが判明しました (これは、テスト ページに表示されるキーを追加することで証明されています)。

私の理解では、ファイルがそこにある限り、IIS はそれを使用する必要があるためです。サーバーの 1 つが正常に動作しているようです。

確認した内容のリストは次のとおりです。

  • config ファイルは app ディレクトリにあります。
  • 上記のファイルの内容は正しいです。
  • IIS > サイト > プロパティ > ASP.NET > 構成の編集からファイルを表示すると、正しいコンテンツが表示されます。

ただし、実行時に使用されるファイルはグローバル ファイル ( windows\ms .net\framework\v2\config\web.config) です。

何がうまくいかないのかについて何か提案はありますか?私が得ることができるすべての助けに感謝します!

ありがとう。

ロブ

4

3 に答える 3

6

これは、ASP.NET 構成の階層です。おそらく、これはどの設定が互いに上書きされるかを理解するのに役立つかもしれません。

サーバ

Machine.config: Machine.config ファイルには、サーバー上のすべての Web アプリケーションの ASP.NET スキーマが含まれています。このファイルは、構成マージ階層の最上位にあります。

ルート Web

Web.config: サーバーの Web.config ファイルは Machine.config ファイルと同じディレクトリに格納され、ほとんどの system.web 構成セクションの既定値が含まれています。実行時に、このファイルは構成階層の上から 2 番目にマージされます。

Webサイト

Web.config: 特定の Web サイトの Web.config ファイルには、その Web サイトに適用され、サイトのすべての ASP.NET アプリケーションとサブディレクトリを通じて下位に継承される設定が含まれています。

ASP.NET アプリケーションのルート ディレクトリ

Web.config: 特定の ASP.NET アプリケーションの Web.config ファイルは、アプリケーションのルート ディレクトリにあり、Web アプリケーションに適用され、そのブランチのすべてのサブディレクトリを継承する設定が含まれています。

ASP.NET アプリケーションのサブディレクトリ

Web.config: アプリケーション サブディレクトリの Web.config ファイルには、このサブディレクトリに適用され、そのブランチ内のすべてのサブディレクトリを通じて下位に継承される設定が含まれています。

クライアント アプリケーション ディレクトリ

ApplicationName.config: ApplicationName.config ファイルには、Windows クライアント アプリケーション (Web アプリケーションではない) の設定が含まれています。


どの ASP.NET ファイルとフォルダーがフォルダーとアプリケーションを介して継承されるかを理解することは、開発とトラブルシューティングにとって非常に重要です。

以下に簡単な要約を示します。

  • web.config ファイルは、すべてのアプリケーションの境界を越えて、ツリー全体を継承します。
  • global.asax はそのアプリケーション内にのみ存在します
  • /bin と /app_{folders} はアプリケーション内にのみ存在します

したがって、これは、一部のフォルダーがアプリケーションとしてマークされていても、ルート web.config ファイルで設定されたものはすべてサイト全体に継承されることを意味します。

これが厄介になるのは、web.config ファイルにアセンブリへの参照があるが、サブアプリケーションにそれらのアセンブリがない場合です。たとえば、サイトのルートに構成された HTTP モジュールがあり、サイトの web.config ファイルから参照されているとします。アプリケーションとしてマークされた /subfolder というサブアプリケーションがある場合、/subfolder は /subfolder/bin から HTTP ハンドラーをロードしようとします。存在しないため、エラーがスローされます。

これには複数の方法があります。/subfolder で HTTP ハンドラーが必要ない場合、おそらく最もクリーンな方法は、/subfolder/web.config ファイルに句を追加して参照を「削除」することです。でこれを行うことができます。サブフォルダー内の HTTP モジュールを削除する方法の例を次に示します。

<httpModules>
  <remove name="ErrorLog"/>
</httpModules>

サイトの web.config は次のようになります。

<httpModules>
      <add name="ErrorLog"  type="GotDotNet.Elmah.ErrorLogModule, GotDotNet.Elmah, Version=1.0.5527.0, Culture=neutral, PublicKeyToken=978d5e1bd64b33e5" />
</httpModules>print("code sample");
于 2008-10-28T12:12:02.063 に答える
0

コメントでおっしゃったことから、「試行錯誤」をお勧めします。

意図的に誤ったエントリを挿入するとどうなりますか?アプリケーションは失敗しますか、それとも何の影響もありませんか?

コンテンツをコピーしてから、そのファイルを最初から削除して再作成してみてください。

于 2008-10-28T13:54:36.053 に答える
0

まず、答えてくれた人たちに感謝します。助けてくれてありがとう!

この問題に関する最新情報です。大変でした!

コードや構成に問題はありませんでした。

サーバーファームで奇妙なことが起こっているようです(私はまったく制御もアクセスもできません)。システム管理者はファームを再構築し、ソリューションを再展開しましたが、すべて正常に機能しました。

何が間違っていたのかはわかりませんが、少なくとも開発上の問題ではないことはわかっています。

ありがとう、ロブ

于 2008-10-31T19:20:58.307 に答える