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