IIS уже делает это, вот что такое переработка. Он загружает библиотеки DLL, пока старая версия приложения еще работает. только после этого переработка будет завершена.
Однако загрузка DLL является лишь частью подготовки веб-приложений , также могут быть начальные загрузки, такие как загрузка / кэширование пользовательской базы данных и т. Д.
Эти действия не являются частью процесса утилизации , они происходят после того, как все DLL перезагружены и утилизация уже завершена.
Некоторое время назад я столкнулся с этой проблемой с приложением, у которого было большое время запуска из-за большой активности / кэширования БД во время запуска. Поэтому мне было интересно, есть ли какая-то функциональность, которая позволяет нам выполнять код до того, как перезапуск помечается как завершенный, так что приложение сначала считается переработанным, когда все готово для запуска. По сути, мне нужна была какая-то промежуточная функциональность.
Я связывался с командой IIS по этой проблеме, к сожалению они сказали мне, что такой функциональности не существует и не планируется .
Чтобы решить эту проблему, вы можете попробовать сделать следующее:
- Использование чередующихся развертываний:
Вы настраиваете 2 веб-сайта с отдельными пулами приложений. Одним из них является веб-сайт LIVE, а другим - веб-сайт STAGED. Если вы хотите развернуть измененное, вы просто развернетесь на веб-сайте STAGED. После того, как все загружено / кэшировано и т. Д., Вы переключаете настройки URL-адресов веб-приложений, чтобы перенаправить входящие запросы из 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.
См .:
http://www.asp.net/whitepapers/aspnet4
Если вы используете функцию автозапуска ASP.NET 4:
Вы по-прежнему можете автоматически перезапускать рабочие процессы
время. Когда вы это сделаете, приложение сразу же перезагрузится и
Ваш прогрев код будет выполнен (в отличие от сегодняшнего дня - где вы должны ждать
для следующей просьбы сделать это).
Основное различие между функцией прогрева и автоматическим запуском заключается в том, что модуль прогрева является частью процесса утилизации. Вместо того, чтобы блокировать приложение для запросов, при запуске кода инициализации .
Единственное, что вы получаете, используя функцию автозапуска, - это то, что вам не нужно ждать, пока пользователь нажмет страницу, что не поможет вашему делу.
См. Сообщение в блоге Гу:
http://weblogs.asp.net/scottgu/archive/2009/09/15/auto-start-asp-net-applications-vs-2010-and-net-4-0-series.aspx
ОБНОВЛЕНИЕ 2:
К сожалению, модуль разогрева был прекращен для IIS 7 / 7.5:
http://forums.iis.net/t/1176740.aspx
Хотя он будет частью IIS8 (теперь он называется модулем инициализации приложения):
http://weblogs.asp.net/owscott/archive/2012/03/01/what-s-new-in-iis-8.aspx
ОБНОВЛЕНИЕ 3:
Как отмечается в комментариях, модуль разогрева для IIS 7.5 снова появился как Модуль инициализации приложения для IIS 7.5 после выпуска IIS 8:
http://www.iis.net/downloads/microsoft/application-initialization