Данная статья показывает новую маленькую, но приятную возможность, которая опционально позволяет автоматизировать запуск и проактивную инициализацию веб-приложения, без надобности ожидать внешнего посещения клиентом сервера. Это поможет предоставить быстрый ответ для первого пользователя, который посетил сервер и позволит избежать написания собственного кода, который «разогреет» сервер и разместит нужную информацию в кэшах. Данное нововведение работает во всех типах 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” в узел :
Если вы запустите диспетчер задач Windows и выберите «Отображать процессы всех пользователей», а потом сохраните отредактированный файл applicationHost.config, то увидите новый процесс “w3wp.exe”, который запускается сразу же после сохранения файла.
Один IIS пул worker-процесса приложения может хостить несколько ASP.NET приложений. Вы можете выбрать, какое приложение автоматически запускается, когда загружается процесс, добавив атрибут serviceAutoStartEnabled=«true» в конфигурации:
Атрибут serviceAutoProvider=«PreWarmMyCache» позволяет настроить собственный класс, который будет использоваться любую логику «разогрева» приложения. Данный класс будет автоматически вызван, как только worker-процесс и приложение будут предзагружены (до приема любых внешних веб-запросов) и может быть использован для запуска любой логики инициализации или кэширования.
IIS запустит приложение, в состоянии, во время которого не будут приниматься запросы, до того как ваша логика «разогрева» не отработает. После того, как ваш код инициализации запустится и отработает в методе Preload, ASP.NET приложение будет помечено, как готовое для обработки запросов.
Вы можете комбинировать новую возможность автозапуска с расширением для балансировки загрузки для IIS7 — Application Request Routing (ARR), сигнализируя балансировщику, как только приложения инициализировано и готово принимать HTTP трафик, следовательно, сервер может быть помещен в веб-ферму для обработки запросов.
Автозапуск веб-приложений в 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 трафик, следовательно, сервер может быть помещен в веб-ферму для обработки запросов.