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

25

У меня есть сайт, который имеет эксклюзивную блокировку на некоторых ресурсах. Я использовал события .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событие старого рабочего процесса никогда не вызывается - это не происходит вне последовательности, это никогда не происходит вообще.

Джон
источник
Сколько времени после обновления web.config до запуска нового рабочего процесса?
Грег Аскью
Новый рабочий процесс запускается, как только я пытаюсь получить доступ к сайту после перезапуска - так меньше секунды, если я быстр. Если оставить это событие, событие «завершение» старого рабочего процесса происходит через 20-30 секунд после перезапуска.
Джон
У меня такая же проблема. Это совпадение
Эндрю Риммер,
11
Редактирование файла web.config приводит к перезагрузке appDomain. Домен приложения отделен от AppPool. Вы не должны видеть новый идентификатор процесса W3WP только после изменения файла web.config. Смотрите здесь treeloop.com/blog/iis-application-domain-and-pool-recycling
хелд
1
@kheld абсолютно прав (возможно, добавьте это как ответ), это не перекрытие appool, это перекрытие appDomain. Я не верю, что вы можете это остановить, но вы можете отключить перезапуск домена приложения при изменении.
Сэм Коган

Ответы:

1

Из этого сообщения 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

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

Мэтт Макдональд
источник