IIS が ASP.Net (2.0) Web アプリケーションを再起動すると、次のいずれかが可能になります。
- AppDomain のリサイクル: AppDomain をアンロードし、同じプロセスで新しい AppDomain をロードします (たとえば、
HttpRuntime.UnloadAppDomain()
が呼び出されたとき、web.config が変更されたとき)。 - プロセスのリサイクル: AppDomain をアンロードし、新しいプロセスに新しいプロセスをロードします (たとえば、inetmgr を介して AppPool で Recycle コマンドを呼び出すとき、またはメモリ制限に達したとき)。
いくつかの内部的な理由 (依存しているレガシー ネイティブ コードの問題) により、最初のオプションは許可できません。同じプロセスでアプリケーションを 2 回ロードすることはできません。
ワーカー プロセスの再利用を許可しないように IIS に指示することはできますか?
Mutex を使用してアプリケーションがプロセス上で既に開始されているかどうかを追跡し、そうであれば - 中に例外をスローすることで、自分でそれを防ごうとしましたApplication_Start()
); Environment.Exit()
また、 duringを呼び出してプロセスを終了しようとしましたApplication_End()
。両方の方法の問題は、Application_End または Application_Start の間に到着した要求が失敗することです (手動のプロセス リサイクルとは異なり、要求はすぐに新しいプロセスにリダイレクトされるため、まったく失敗しません)。