Пул приложений IIS / перезапуск и ASP.NET

мы используем IIS7 для размещения asp.net веб-приложение. В этой среде администраторы и разработчики могут развертывать код в приложение на регулярной основе.

новый код или приложение идет как DLL к ASP.NET папка bin. После развертывания новой библиотеки DLL IIS перезапускает процесс, влияя (замедляя) на всех пользователей в интернете.

есть ли способ настроить IIS для запуска процесса в фоновом режиме и после готовности сделать переход из старого состояния в новое не влияя на пользователей?!

заранее спасибо за ваши отзывы!

2 ответов


IIS уже делает это,вот что такое переработка. Он загружает DLL, пока старая версия приложения все еще работает. только после этого утилизация будет завершена.

загрузка DLL-это только часть получения веб-приложений, готовых, также могут быть начальные нагрузки, такие как загрузка / кэширование пользовательской БД и т. д.
эти действия не являются частью процесса переработки, они происходят после перезагрузки DLL и переработка уже завершена.

некоторое время назад я столкнулся с этой проблемой с приложением, которое имело огромное время запуска из-за тяжелой активности/кэширования БД во время запуска. Поэтому мне было интересно, есть ли какая-то функциональность, которая позволяет нам выполнять код до того, как утилизация будет отмечена как завершенная, так что приложение сначала считается переработанным, когда все готово к запуску. В основном то, что я хотел, - это какая-то промежуточная функциональность.
Я был в контакте с Команда IIS по этой проблеме, к сожалению Они сказали мне, что такой функциональности не существует и не планируется.

чтобы решить эту проблему, вы можете попробовать сделать следующее:

  • используйте чередующиеся развертывания:
    Вы настраиваете 2 веб-сайта с отдельными пулами приложений. Один из них-живой веб-сайт, другой-постановочный веб-сайт. Если вы хотите развернуть измененный, вы просто развертываете на поэтапном веб-сайте. После того, как все загружено/кэшировано и т. д. вы переключаете URL настройки веб-приложений для перенаправления входящих запросов из LIVE в поэтапный. Таким образом, живое становится новым постановочным и наоборот. Следующее развертывание затем снова перейдет к новому этапу и так далее.

обновление
По-видимому, они создали модуль 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 функция автозапуск:

вы все равно можете выбрать автоматическую переработку рабочих процессов время от времени время. Когда вы это сделаете, приложение немедленно перезапустится и ваш код будет выполняться (в отличие от сегодняшнего дня - где вам придется ждать для следующего запроса to-do что.)

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

см. сообщение в блоге ГУ:

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


первая часть ntziolis ответ немного неточно. Рабочий процесс не перерабатывается или перезапускается, он просто продолжает работать. Если бы это было так, то в средах общего пула сайты выбивались бы каждый раз при развертывании нового.

при развертывании нового ASP.NET приложение это "домен приложения" сайта внутри рабочий процесс снесен, а не процесс пула.

дополнительно бассейн утилизация-это совершенно отдельная концепция для развертывания

в этот момент времени в коммерческой жизни ASP.NET во время развертывания сайт будет находиться в несогласованном состоянии до развертывания всего сайта. В настоящее время нет хорошей истории об этом от Microsoft для одного сайта на одном сервере развертывания.

вот почему ASP.NET имеет специальный App_Offline.htm страница. Он там, чтобы вы могли включить эту страницу, развернуть и затем повернуть ее выключено.

вторая часть ntziolis ответ почти правильно, но вам не нужны два сайта или два пула приложений. Вам просто нужны две папки файловой системы, которые переключаются между физическими папками для сайта...если вы находитесь на одном сервере, а не за балансировщиком нагрузки или ARR.

Если ваши сайты были на веб-сервере за балансировщиком нагрузки или ARR, то наличие двух разных сайтов имело бы смысл, вы могли бы маршрутизировать запросы с одного сайта на другой и по кругу на каждом развертывании.

очевидно, что если есть большое количество пользовательского контента (загруженные файлы и тому подобное), то вы бы карту виртуального каталога на сайте в общем расположении этих данных.

в крупномасштабных развертываниях, где ваше приложение работает (например) в среде с балансировкой нагрузки, вы можете выполнять более сложные развертывания.

по связанным вопросам см.:

как развернуть приложение для IIS во время работы этого веб-приложения

публикация / загрузка новой DLL в IIS: веб-сайт идет вниз во время загрузки

возможно ли плавное развертывание с помощью componentized ASP.NET приложения MVC?