Ответ 1
IIS уже делает это, что касается утилизации. ИТ-загрузка DLL, когда старая версия приложения все еще запущена. только после этого завершение утилизации завершается.
Однако загрузка DLL - это только часть готовых веб-приложений, также могут быть начальные нагрузки, такие как загрузка/кэширование пользователя db и т.д.
Эти действия не являются частью процесса рециркуляции, они происходят после перезагрузки DLL и завершения утилизации.
A назад я столкнулся с этой проблемой с приложением, у которого было огромное время запуска из-за тяжелой активности/кэширования db во время запуска. Поэтому мне было интересно, есть ли какая-то функциональность, которая позволяет нам выполнять код до того, как рециркуляция будет отмечена как завершенная, так что приложение будет считаться переработанным, когда все будет готово к запуску. В основном то, что я хотел, это какая-то промежуточная функциональность.
Я был в контакте с командой IIS по этой проблеме, к сожалению они сказали мне, что такой функциональности нет и не планируется.
Чтобы решить эту проблему, вы можете попробовать сделать следующее:
- Использование альтернативных развертываний:
Вы настраиваете 2 веб-сайта с отдельными пулами приложений. Одним из них является веб-сайт LIVE, другой - веб-сайт STAGED. Если вы хотите развернуть изменения, вы просто развертываете их на веб-сайте STAGED. После того, как все загружено/кэшировано и т.д., Вы переключаете параметры URL-адресов веб-приложений, чтобы перенаправить входящие запросы из LIVE в STAGED. Таким образом, LIVE становится новым STAGED и наоборот. Затем следующее развертывание перейдет к новому STAGED и так далее.
UPDATE
По-видимому, они создали модуль IIS, который теперь предоставляет эту функциональность:
Модуль прогрева приложений IIS для IIS 7.5
Команда IIS выпустила первую бета-версию Модуль разминирования приложений для IIS 7.5. Это приводит к приложений даже проще, чем описано ранее. Вместо написания пользовательский код, вы указываете URL-адреса ресурсов для выполнения перед Веб-приложение принимает запросы из сети. Это разминка происходит во время запуска службы IIS (если вы настроили IIS пул приложений как AlwaysRunning) и когда рабочий процесс IIS перерабатывает. Во время утилизации старый рабочий процесс IIS продолжает выполнять запросы до тех пор, пока процесс нового порожденного рабочего не будет полностью прогреваются, так что приложения не будут прерываться или проблемы из-за немаркированных кешей. Обратите внимание, что этот модуль работает с любыми версия ASP.NET, начиная с версии 2.0.
Дополнительные сведения см. в разделе "Разогрев приложений" на веб-сайте IIS.net. Для прохода, в котором показано, как использовать функцию разминки, см. Начало работы с модулем разминирования приложений IIS 7.5 на Веб-сайт IIS.net.
Смотрите:
Если вы используете функцию автоматического запуска ASP.NET 4:
Вы все же можете выбрать автоматическую переработку рабочих процессов со времени до время. Когда вы это сделаете, приложение немедленно перезапустится и ваш код разминки будет выполнен (в отличие от сегодняшнего дня, когда вам нужно подождать для следующего запроса - сделать это).
Основное различие между функцией Warm Up и Auto Start заключается в том, что модуль Warm Up является частью процесса рециркуляции. Вместо того, чтобы блокировать приложение для запросов, при запуске кода инициализации.
Единственное, что вы получаете с помощью функции автоматического запуска, - это то, что вам не нужно ждать, пока пользователь нажмет на страницу, что не поможет вашему делу.
См. сообщение в блоге Гу:
ОБНОВЛЕНИЕ 2:
К сожалению, модуль Warmup был отключен для IIS 7/7.5:
Он будет частью IIS8 (теперь он называется Модуль инициализации приложения):
http://weblogs.asp.net/owscott/archive/2012/03/01/what-s-new-in-iis-8.aspx
ОБНОВЛЕНИЕ 3:
Как указано в комментариях, модуль Warmup обновился для IIS 7.5 в качестве модуля инициализации приложения для IIS 7.5 после выхода IIS 8:
http://www.iis.net/downloads/microsoft/application-initialization