1

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 でどのように機能するかを説明するヒントまたはドキュメントを探しています。

前もって感謝します、

ハワード・ホフマン

4

1 に答える 1

0

このような状況につながる可能性があるアプリケーション プールのリサイクルについて学んでください。IIS がプールのリサイクルを決定すると、最初に新しいワーカー プロセスが初期化され (Application_Start が順番に呼び出されます)、古いワーカー プロセスがシャットダウンされます (Application_End)。

上記の分析が正しいかどうかをよりよく理解するために、ログにプロセス ID を使用してアプリケーション レベルのログを追加することをお勧めします。

ASP.NET 開発者には、IIS についてさらに学習することをお勧めします。

于 2010-08-08T03:06:05.830 に答える