web-dev-qa-db-ja.com

IIS 7.5-web.configが更新されたときに無効になっている重複したリサイクルプロパティを無効にする

一部のリソースを排他的にロックしているサイトがあります。 .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イベントが呼び出されない-発生しない順不同で、それは決して起こりません。

25
John

このMSDN投稿から: https://blogs.msdn.Microsoft.com/tess/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles/

したがって、コードのデプロイプロセスの一部として、これらの変更のいずれかをデプロイすると、プールがリサイクルされるように見えます。

即時リサイクル

  • Web.configの変更
  • Machine.configの変更
  • Global.asaxの変更
  • Binディレクトリの変更
  • App_Codeの変更

借用元:https://stackoverflow.com/questions/302110/what-c​​auses-an-application-pool-in- iis-to-recycle

1
Matt McDonald