суббота, 2 апреля 2011 г.

Способы размещения служб WCF. Часть 3: размещение в среде Windows Process Activations Services


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:*’]