IIS7 / Windows 2008 で ASP.NET (3.5 SP1) アプリケーションを実行しています。Global.asax で Application_Start および Application_End イベントをトラップします。また、アプリで WCF サービスをホストし、ServiceHostFactory を介して OnOpening および OnClosing イベントをトラップします。したがって、スケジュールされているかどうかにかかわらず、アプリケーションの開始と停止の通知が保証されていると考えました。
数日前、アプリケーションが「開始」/「実行中」の状態で Application_Start イベントをキャッチしました。
Application_End イベントが Application_Start の前に発生することはありません (または、競合状態が考慮される場合は、数分後に発生することさえありません)。
私たちの最初の考えは、アプリケーションが実際に静かにクラッシュして終了したということでした。実際に起こったのは、インバウンド要求にサービスを提供するために新しいアプリ ドメインがスピンアップしたことですが、既存のアプリ ドメインのバックグラウンド スレッド (ThreadPool スレッドで多くのことを行っています) は、IISRESET でそれらを強制終了するまで、数日間実行されたままでした。
元の AppDomain が終了しなかったため、Application_End が起動しなかったと推測されますが、なぜ Application_Start が起動したのでしょうか?
この半シャットダウン + AppDomainStartup メカニズムが ASP.NET でどのように機能するかを説明するヒントまたはドキュメントを探しています。
前もって感謝します、
ハワード・ホフマン