.NET

индекс
121,07

Автозапуск ASP.NET приложений

imageДанная статья показывает новую маленькую, но приятную возможность, которая опционально позволяет автоматизировать запуск и проактивную инициализацию веб-приложения, без надобности ожидать внешнего посещения клиентом сервера. Это поможет предоставить быстрый ответ для первого пользователя, который посетил сервер и позволит избежать написания собственного кода, который «разогреет» сервер и разместит нужную информацию в кэшах. Данное нововведение работает во всех типах ASP.NET приложений, включая Web Forms и MVC.

Автозапуск веб-приложений в ASP.NET 4

Некоторые веб-приложения требуют загрузки большого количества данных или выполняют трудоемкий процесс инициализации, до возможности обрабатывать запросы. Разработчики, использующие ASP.NET сегодня, часто пользуются для этого событием “Application_Start” в файле Global.asax, которое выполняется первый раз при запуске запросов. Они изобретают собственные скрипты для отсылки ложных запросов в приложение, для периодического «пробуждения» и запускают этот код до пользователя или предполагают несчастному первому пользователю подождать, пока определенные действия отработают, до обработки первого запроса.

ASP.NET 4 предоставляет новую возможность, называемой “auto-start”, которая лучше реализует данный сценарий и доступную на IIS 7.5 (который устанавливается на Windows 7 и Windows Server 2008 R2). Автозапуск позволяет контролировано присоединиться к запуску worker-процесса приложения, инициализировать ASP.NET приложение, а затем принимать HTTP запросы.

Конфигурирование ASP.NET 4 приложения для автозапуска

Для использования автозапуска, нужно настроить IIS “application pool” worker-процесса, который автоматически запускается приложением, когда веб-сервер впервые загружается. Вам нужно открыть applicationHost.config в IIS 7.5 (C:\Windows\System32\inetsrv\config\applicationHost.config) и добавить атрибут startMode=”AlwaysRunning” в узел :
<applicationPools>

   <add name="MyAppWorkerProcess" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />

</applicationPools>

Если вы запустите диспетчер задач Windows и выберите «Отображать процессы всех пользователей», а потом сохраните отредактированный файл applicationHost.config, то увидите новый процесс “w3wp.exe”, который запускается сразу же после сохранения файла.

Один IIS пул worker-процесса приложения может хостить несколько ASP.NET приложений. Вы можете выбрать, какое приложение автоматически запускается, когда загружается процесс, добавив атрибут serviceAutoStartEnabled=«true» в конфигурации:

<sites>

   <site name="MySite" id="1">

     <application path="/" serviceAutoStartEnabled="true" serviceAutoStartProvider="PreWarmMyCache" />

   </site>

</sites>

<serviceAutoStartProviders>

   <add name="PreWarmMyCache" type="PreWarmCache, MyAssembly" />

</serviceAutoStartProviders>


Атрибут serviceAutoProvider=«PreWarmMyCache» позволяет настроить собственный класс, который будет использоваться любую логику «разогрева» приложения. Данный класс будет автоматически вызван, как только worker-процесс и приложение будут предзагружены (до приема любых внешних веб-запросов) и может быть использован для запуска любой логики инициализации или кэширования.
public class PreWarmCache : System.Web.Hosting.IProcessHostPreloadClient {

  public void Preload(string[] parameters) {

    // Perform initialization and cache loading logic here...

  }

}

IIS запустит приложение, в состоянии, во время которого не будут приниматься запросы, до того как ваша логика «разогрева» не отработает. После того, как ваш код инициализации запустится и отработает в методе Preload, ASP.NET приложение будет помечено, как готовое для обработки запросов.

Вы можете комбинировать новую возможность автозапуска с расширением для балансировки загрузки для IIS7 — Application Request Routing (ARR), сигнализируя балансировщику, как только приложения инициализировано и готово принимать HTTP трафик, следовательно, сервер может быть помещен в веб-ферму для обработки запросов.
+9
27 октября 2009, 12:52
18

комментарии (9)

0
Yarc #
Остается только ждать, когда же хостеры обновятся.
0
VasilioRuzanni #
Странно, что раньше такой опции не было. Приходилось, действительно, использовать «пробуждающие» скрипты (aka Worker Process Defibrillators), которые должны обращаться к серверу периодически, а также, таким образом, обновлять кэш kernel-уровня.
Однако странно, что эту опцию не вынесли в стандартные настройки IIS.

Но, я так понял, эта фишка специфична именно для ASP.NET 4? Или ASP.NET 3.5 тоже попадает «под раздачу»?
–1
jeje #
ASP.NET 4.0, только у неё
0
mihey911 #
Значительно упростит создание новых приложений, но и для старых сгодится :) Хорошо, что не вынесли в стандартные настройки IIS, в любом случае процесс «разогрева» должен быть обоснованным и контролируемым, чтобы не загружать лишний раз сервер.
0
VasilioRuzanni #
Да, но поскольку задача актуальна и уже давно, почему бы и не вынести в стандартные настройки, с возможностью отключения.
0
goodman #
возможно не позволяет какие-то ограничения архитектуры языков 3.5 и 4.0
0
goodman #
версий языка (извините за помарку)
0
Angelina_Joulie #
Есть предположение, что это как-то связано с GC, но спеки ещё не читала.
0
mihey911 #
Мне кажется, было бы лучше с возможностью включения :)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.