Pull to refresh

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

.NET *
Translation
Original author: Scott Gu
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 трафик, следовательно, сервер может быть помещен в веб-ферму для обработки запросов.
Tags:
Hubs:
Total votes 31: ↑20 and ↓11 +9
Views 6K
Comments 9
Comments Comments 9