13 июля 2018 г.

Автозапуск и инициализация пула приложений на версий IIS 7.5, 8.0, 8.5 и 10.

Шаг 0. Описание проблемы.

Инициализация приложения IIS должна начинаться сразу после запуска или перезапуска Application Pool. Тем самым вы повысите качество обслуживания первых клиентов, если ваше приложение требует какой то инициализации перед началом обслуживания. Данный способ не использует сторонние сервисы и приложения.

Шаг 1.  Установка Application Initialization.

Необходимо убедиться, что у вас установлен Application Initialization. Описание и его настройку на английском языке можно найти по ссылке IIS 8.0 Application Initialization. Статья, по которой я изначально учился настраивать, расположена по адресу Configure the IIS Application Initialization module. Тут же я опишу все шаги на русском языке и не залезая в файлы конфигурации IIS Server. 

Для начала надо понять какая у вас стоит версия IIS, для этого можно воспользоваться таблицей:


Версия IIS    Операционные системы
1.0Windows NT 3.51
2.0Windows NT 4.0
3.0Пакет обновления 3 для Windows NT 4.0
4.0Пакет Option Pack для Windows NT 4.0
5.0Windows 2000
5.1Windows XP Professional
6.0Windows Server 2003
7.0Windows Vista; Windows Server 2008
7.5Windows 7; Windows Server 2008 R2
8.0Windows 8; Windows Server 2012
8.5Windows 8.1; Windows Server 2012 R2
10Windows 10; Windows Server 2016


IIS 7.0 и ниже - не поддерживается этим модулем.
IIS 7.5 - переходим по ссылке Application Initialization Module for IIS 7.5 и снизу скачиваем  установщик и устанавливаем под разрядность вашей операционной системы.

Если вы пользовались Web Platform Installer для установки этого модуля и получили ошибку: IISCA ExecuteInstallWindowsHotfixCA : Error in function InstallWindowsHotfixQuietly, hr=0x80070643 , тогда вам перед установкой нужно включить Windows Update службу и попробовать снова
IIS 8.0, 8.5 и 10 - данный модуль уже установлен и вам достаточно только его включить. Если вы используете серверную операционную систему, тогда вам необходимо отрыть настройки ролей и там поставить галку напротив Application Initialization:


Если вы используете клиентскую операционную систему, тогда необходимо перейти в окно "Установка и удаление программ" и выбрать там "Добавление удалений компонентов Windows".



Шаг 2. Требуемые параметры.
Вся настройка сводится к тому, что мы должны задать 2 параметра:
  1. startMode="AlwaysRunning" говорит о том, что W3WP.exe должен запускаться автоматически, и даже если вы его "убьёте" через диспетчер задач, то он сразу пере запустится. Данный процесс как раз таки и будет в последующем хостить указанные в IIS для него приложения. Но не стоит радоваться, что теперь все работает, потому что сам процесс будет занимать какие то ничтожные несколько мегабайт, и вам все равно придётся делать первый вызов, пока не укажите второй параметр.
  2. preloadEnabled="True" - теперь сразу после запуска процесса W3WP.exe, ваше приложение начнёт процесс инициализации как при первом обращении.

Шаг 3. Настройка startMode="AwaysRunning" в IIS.

1.  Открываем Configuration Editor выделив сверху свой сервер.


2. В Section выбираем system.applicationHost/applicationPools.



3. Выделяем строку (Collection), далее справа появится кнопка с троеточием. Нажимаем на неё.


4. В появившемся окне СНАЧАЛА выбираем ваш Application Pool сверху, затем снизу выбираем startMode -> AlwaysRunning. Закрываем окно Collection Editor.


5. Обязательно! Не забудьте нажать на кнопку "Сохранить".


Шаг 4. Настройка preloadEnabled="True" в IIS.

1. В разделе Section выбираем system.applicationHost/sites.


2. Выделяем строку (Collection) далее справа нажимаем на кнопку с троеточием.



3. Первым делом надо выбрать сверху ваш сайт, затем в свойствах найти applicationDefaults, раскрыть его и в свойстве preloadEnabled выставить True.



4. Обязательно! Не забудьте нажать на кнопку "Сохранить".


Шаг 5. Проверка.

Необходимо перезапустить Application Pool и заметить, что его инициализация должна начаться сразу после запуска. А если процесс W3WP.exe убить из диспетчера задач, то он сразу запустится заново и начнёт снова инициализацию.

FAQ:

В: Как понять, какое приложение запущено в процессе W3WP.exe.
О: Я пользуюсь утилитой Process Explorer. Для того, что бы понять что размещено на конкретном процессе достаточно подвести мышку к процессу и во всплывающем окне можно заметить название сайта у параметра -ap.

Пример:


В: Process Explorer показывает "Отказано в доступе", что делать?
О: Самый простой способ решения это запуск Application Pool от имени какого то пользователя, а не Network Service. Для этого в "Application Pools" выбираем наш пул и жмём "Advanced Settings" и в поле Indentity выбираем учетную запись, после чего пере запускаем пул.

Комментариев нет:

Отправить комментарий