Windows Process Activation Service (WAS) - это среда, которая управляет активацией и жизненным циклом рабочих процессов, в контексте которых выполняется служба WCF. Модель WAS, в отличии от IIS предоставляет возможность использовать не только протокол HTTP, но и такие протоколы как TCP, Pipes и др. WAS является дополнением к IIS и включена в Windows Server 2008.
WAS имеет следующие преимущества:
- Автоматический запуск/остановка рабочего процесса службы при обращении клиентов как с использованием протокола HTTP, так и с использованием иных протоколов. Такой способ запуска и остановки приложений обеспечивают более эффективное использование ресурсов сервера.
- Централизованное управление службами
- Использование всех преимуществ IIS
Рассмотрим пример размещения службы WCF в среде WAS, которая должна быть автоматически установлена в Windows Server 2008 и выше. Для того, чтобы убедится, установлена ли WAS на сервере открывает окно ServerManager и проводнике слева выбираем пункт Features. Далее жмем кнопку Add Features и в открывшемся окне в списке дополнений находим WAS:
Так же необходимо убедиться, что в самом .Net Framework включена опция взаимодействия с WCF через протокол, отличный от HTTP:
На рисунке видно, что включена активация через HTTP (возможность размещения служб WCF в контексте IIS), так и активация через отличный от HTTP протокол (в этом случае, служба может быть размещена в контексте WAS).
Далее создаем виртуальный каталог в IIS, где будет размещаться наша служба. Я добавил виртуальный каталог в сайт Default Web Site. Следующим шагом скопируем файлы службы в этот каталог. Обязательно, чтобы служба имела файл *.svc (см. Часть 1: размещение службы в IIS). В файле конфигурации службы определим привязку, отличную от HTTP:
Теперь настроим конфигурацию самого WAS. Все настройки конфигурации WAS хранятся в файле ApplicationHost, который находится в файле %windir\System32\inetsrv\config. Изменять данный файл можно как руками так через специальную утилиту appcmd.exe в папке %windir\System32\inetsrv\.
Задача настроек WAS состоит в следующем:
- Нужно задать конкретный порт, который будет открыт на прослушку
- Нужно разрешить виртуальному приложению, где размещена служба, использовать нужный протокол
С синтаксисом appcmd.exe можно ознакомиться, набрав в командной строке appcmd.exe /? Либо по этой ссылкеhttp://learn.iis.net/page.aspx/114/getting-started-with-appcmdexe
Выполним следующие команды с правами администратора:
appcmd.exe set site "Default Web Site" –+bindings.[protocol=’net.tcp’,bindingInformation=’808:*’]
Здесь мы выполняем команду set (конфигурация виртуальной директории), для объекта site (у нас указано название сайте Default Web Site в ковычках). Эта команда добавляет привязку узла к протоколу net.tcp в веб-узел по умолчанию, ожидающему передачи данных по протоколу TCP на порту 808 с любым именем узла.
appcmd.exe set app "Default Web Site/WcfWAS"/enabledProtocols:http,net.tcp
Этой командой сообщаем, что наша служба (обратите внимание, что используется объект app, вместо site) будет работать через протоколы HTTP и TCP. Таким образом, после выполнения этой команды к службе можно будет обратиться по адресу net.tcp://server/WcfWAS
Все, служба WCF размещена. Теперь к ней можно обращаться по адресуnet.tcp://server/WcfWAS.
Можно выполнить и обратные команды: запретить службе работать через TCP иудалить привязку протокола TCP.
appcmd.exe set app "Default Web Site/WcfWAS"/enabledProtocols:http
appcmd.exe set site "Default Web Site" --bindings.[protocol=’net.tcp’,bindingInformation=’808:*’]