一部のリソースを排他的にロックしているサイトがあります。.NET Application_StartイベントとApplication_Endイベントを使用して、適切なタイミングでこれらのリソースのロックを取得および解放しました。これが適切に機能するためには、常に実行中のアプリケーションのインスタンスは1つだけです。
これを実現するにはDisable Overlapped Recycle
、アプリケーションプールのプロパティをに設定しましたTrue
。このプロパティは、アプリプールがリサイクルされるたびに新しいワーカープロセスが起動する前に、古いワーカープロセスが完全にシャットダウンすることを保証することになっています。これは、アプリプールがIISを介して手動で、アイドルタイムアウトに達した結果として自動的に、または特定の時間/時間間隔ルールに従って自動的にリサイクルされる場合は常に機能します。
ただし、サイトのweb.configが更新されても、このルールは適用されません-古いワーカープロセスがシャットダウンを完了する前に新しいワーカープロセスが起動します。これにより、悪いことが起こります。web.configが更新されたときにアプリプールをリサイクルしたいので、Disable Recycling for Configuration Changes
プロパティを設定していますFalse
。これは開発中に頻繁に発生します。
これは予想されるものですか、それともIISのバグですか?web.configを変更してもアプリプールがリサイクルされないように設定する唯一のオプションはありますか?構成を変更してからアプリプールをリサイクルするのを忘れると、多くの頭痛の種になると確信しているので、これはやめたいと思います。
更新:
より明確にするためstart
に、古いワーカープロセスのシャットダウンが完了する前に新しいワーカープロセスイベントが呼び出された場合、古いワーカープロセスend
イベントは呼び出されません-シーケンス外で発生することはなく、まったく発生しません。