2014-12-30 3 views
4

У меня есть Overlapping Recycling настроен для моего сайта ASP.NET MVC.Выполняет ли редактирование файл Web.config перекрывающуюся переработку или запуск + остановку пула приложений?

Как я понимаю (from this SO question), если я переработаю пул приложений, это запустит новый процесс w3wp.exe, чтобы загрузить нагрузку того, который перерабатывается, и только тогда, когда новый процесс инициализируется и принимает нагрузка, будет отключен старый процесс. И если я остановлю/запустил пул приложений, он немедленно совершит убийство, не позволяя процессу выйти изящно или позволить первому начать процесс замены.

Вопрос: когда я отредактирую файл Web.config, он перезапустит связанный с ним пул приложений IIS. Будет ли это инициировать приятное перекрывающееся поведение по переработке или жестокое прекращение/начало поведения?

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

+1

Я не знаю точно, но изменения web.config обрабатываются на уровне ASP.Net. У этого есть наблюдатель файлов, который наблюдает за этим файлом и несколькими каталогами. И Overlappign Recycling - это вещь IIS, так как для меня это сделает жестокую остановку \ запуск. –

ответ

4

Я решил использовать науку. Я провел эксперимент с моим сервером под инструментом тестирования нагрузки, где я неоднократно редактировал и сохранял файл Web.config во время запросов.

Никаких запросов не было удалено, когда изменения были сохранены в файле Web.config.

Я наблюдал короткий всплеск активности процессора, в то время как новые настройки были загружены, но на самом деле едва заметны вообще.

Мне удалось доказать, что настройки загружались, если файл Web.config был плохо отформатирован и сохранил его. Это немедленно вызвало запросы о сбое.

Что меня удивило, так это то, что process id не изменилось с помощью редактирования Web.config. Мое понимание IIS Overlapping Recycle было для IIS, чтобы запустить новый процесс w3wp.exe, а затем отключить старый. Это означало бы другой идентификатор процесса. Поэтому я не думаю, что Overlapping Recycle здесь.

Так как process id то же самое, то я думаю, что это совершенно отдельный механизм, который загружает/выгружает AppDomain. Это, кажется, поддерживается this document, соответствующий бит приводится ниже:

Изменения конфигурации Причина перезапуска приложения домена

Изменения параметров конфигурации в файлах web.config косвенно вызвать приложение домен для перезагрузки. Такое поведение происходит по дизайну. Вы можете использовать атрибут configSource для ссылки на внешние файлы конфигурации , которые не вызывают перезагрузки при внесении изменений. Для получения дополнительной информации см. ConfigSource в общих атрибутах Inherited разделами.

TLDR

Ни Перекрытие корзины, или зверское стоп/старт поведения вызваны Web.config редактирования. AppDomain повторно загружается с новыми настройками без прерывания обработки запроса.

http://msdn.microsoft.com/en-us/library/ackhksh7.aspx

+0

Хорошая работа! Я часто задавался вопросом о различиях и почему изменение конфигурации часто было быстрее «перезапускать» по сравнению с повторной загрузкой пула приложений. –

1

Редактирование (или прикосновение) web.config, не вызовет 'хорошие перекрывающиеся рециркуляции'. Как описано выше, процесс запроса не будет «прерываться», но новые входящие запросы должны ждать, пока новый рабочий процесс завершит свою инициализацию. Поэтому в зависимости от времени инициализации будет заметный разрыв. Я заметил, что в приложении WCF-Service, размещенном в IIS7.5, где я реализовал IProcessHostPreloadClient, чтобы сделать некоторое время дорогим материалом предварительной загрузки. С другой стороны, «переработать», щелкнув элемент контекстного меню приложения в диспетчере IIS, сделает приятное перекрытие: новые входящие запросы обрабатываются старым рабочим процессом, пока новый работает по методу предварительной загрузки.