18

複数のアプリケーション ドメインを持つ IIS 7 で ASP.NET アプリケーションを実行していますが、1 つのプロセスに複数のアプリケーション ドメインが存在する理由がわかりません。コード ベースを grep しましたが、明示的に 2 つ目のアプリケーション ドメインを作成していません。リサイクルがタイムアウトに失敗した可能性はありますか?

  • これらの二重ドメインはしばらくの間持続します。
  • Web 構成またはバイナリの変更が原因でリサイクルが発生した場合、両方のアプリ ドメインが停止し、2 つの新しいドメインが起動します。
  • これらのサーバーには、1 日に複数のバイナリ パッチと IISResets が適用されます。ドメインが 2 つある場合もあれば、ドメインが 1 つしかない場合もあります。
  • Web ガーデニングが無効になっています。
  • これを発見したのは、アプリケーションにデータベースへのハートビートがあるタイマーがあるためです。ある日、サーバーに 2 つのハートビートがあることに気付きました。

windbg で !dumpdomain を実行すると、次の結果が表示されます (アプリ ドメインの名前のみを表示するようにフィルター処理されます)。

Line 59: Name:               None
Line 66: Name:               None
Line 372: Name:               DefaultDomain
Line 460: Name:               /LM/W3SVC/1/ROOT/MyAppDomain-1-129882892717131250
Line 4437: Name:               /LM/W3SVC/1/ROOT/MyAppDomain-4-129285605131450579
4

4 に答える 4

7
  1. を作成していなくても、AppDomain使用しているライブラリが作成されている可能性があります。どのサードパーティコンポーネントを使用していますか?制御の反転または動的プロキシライブラリが原因である可能性がありますか?これがCastleで起こっていることの説明です。

  2. アプリケーションがIISの1か所でのみ実行されていることを確認しますか?同じファイルから複数のIISサイト/アプリケーションを実行することができます。これは、(1)アプリではなくデータベースからデバッグ情報を取得すること、および(2)編集によってweb.config一貫してドメインが重複することによるリサイクルと一致します。1つの場所が他の場所よりも一般的にアクセスされる場合、これは、1つの場所しかない理由を説明する可能性がありAppDomainます。

  3. ASP.NETの動的コンパイルおよびシャドウコピー機能を利用している場合、ASP.NETには複数AppDomainのが含まれることがあります。Jim Schubertは、 ASP.NET、AppDomains、およびシャドウコピーと呼ばれる記事を作成しました。この記事では、これをより詳細に説明し、これweb.configをカスタマイズするために変更する方法についていくつかの提案を行っています。彼はまた、DLLを上書きすると、ASP.NETアプリケーションの実行が停止しますか?で役立つ回答があります。 を設定すると、シャドウコピーを無効にできます<hostingEnvironment shadowCopyBinAssemblies="false" />

アップデート

私はJimSchubertのブログに夢中になり、.NETアプリケーションの単一インスタンスのみを許可するというこの無関係な投稿を読んでしまいました。他のすべてが失敗した場合は、このアプローチを使用して、アプリケーションの1つのインスタンスのみが実行されていることを確認できます。

于 2012-06-15T01:13:11.810 に答える
2

あなたのを見てくださいApplicationHost.config

見てください:maxProcessesそれは1でなければなりません。

IISが複数のワーカープロセスを開始しているようです。

于 2012-06-12T22:46:25.273 に答える
0

同じパスを対象とする IIS アプリケーションが複数ある場合。アプリが呼び出されると、そのような IIS アプリケーションごとに AppDomain が作成されます。

例えば:

両方が同じパスを対象としている場合でも、2 つの異なるアプリケーションとしてカウントされ、2 つの AppDomains が作成されます。

于 2016-10-26T11:47:44.787 に答える
0

別のスレッドの次の回答https://stackoverflow.com/a/3318367/2001769 で示唆されているように、ASP.NET ランタイムは HttpApplication インスタンスのプールを保持しているようです (maxProcesses / Web Garden に関係なく)。

このプールを制御することが可能かどうか、または望ましいかどうかさえわかりません。ベスト プラクティスは、プールされた HttpApplication インスタンスごとではなく、アプリケーションごとに 1 回だけ実行される Application_Start イベントで、すべてのアプリケーション シングルトンをインスタンス化することです。

于 2016-01-05T10:10:21.543 に答える