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