Назад | Перейти на главную страницу

IIS 7.5 - отключить свойство Overlapped Recycle, которое не соблюдается при обновлении web.config

У меня есть сайт, на котором есть эксклюзивная блокировка некоторых ресурсов. Я использовал события .NET Application_Start и Application_End для получения и снятия блокировки этих ресурсов в подходящее время. Чтобы это работало правильно, в любой момент времени может быть запущен только один экземпляр моего приложения.

Чтобы это произошло, я установил Disable Overlapped Recycle свойство в пуле приложений, чтобы True. Это свойство должно гарантировать, что старый рабочий процесс полностью отключится перед запуском нового при повторном использовании пула приложений. Это отлично работает всякий раз, когда пул приложений перезагружается вручную через IIS, автоматически в результате достижения тайм-аута простоя или автоматически в соответствии с любыми конкретными правилами времени / временного интервала.

Однако при обновлении файла web.config для сайта это правило не применяется - новый рабочий процесс запускается до того, как завершится завершение работы старого. Это приводит к тому, что происходят плохие вещи. у меня есть Disable Recycling for Configuration Changes свойство установлено на False поскольку я действительно хочу, чтобы пул приложений перерабатывался при обновлении web.config - это часто происходит во время разработки.

Ожидается ли это, или это ошибка в IIS? Является ли мой единственный вариант настроить так, чтобы изменение web.config не перезагружало пул приложений? Я бы предпочел не делать этого, так как я почти уверен, что это вызовет много головной боли, когда люди изменят конфигурацию, а затем забудут переработать пул приложений.

Обновить:

Для большей ясности, когда новый рабочий процесс start событие вызывается до того, как старый рабочий процесс завершит завершение работы, затем старый рабочий процесс end событие никогда не вызывается - оно не происходит вне очереди, никогда не происходит вообще.

Из этого сообщения 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
  • Изменения каталога корзины
  • App_Code изменения

(заимствовано из: https://stackoverflow.com/questions/302110/what-causes-an-application-pool-in-iis-to-recycle )