
- •Технология wcf Оглавление
- •Введение
- •Создание wcf-сервиса
- •Создание интерфейса сервиса
- •Концепция “abc”
- •Хосты сервисов wcf
- •Развертывание wcf-сервиса в консольном приложении
- •Настройка конфигурационного файла
- •Развертывание wcf-сервиса в iis
- •Публикация метаданных сервиса
- •Создание клиента
- •Контракты данных
- •Контракты ошибок
- •Отладка системы wcf
- •Безопасность wcf
- •Заключение
Развертывание wcf-сервиса в iis
Теперь посмотрим, как выполнить такую же задачу в IIS. Создадим обычный Web-сайт:
Удалим из него страницу Default.aspx и добавим ссылки на те же сборки WCF. Так же добавим ссылку на сборку нашего сервиса. Теперь добавим в проект файл SimpleService.svc. Его содержимое очень просто:
<%@ ServiceHost Language="C#" Service="ServiceLibrary.FirstService, ServiceLibrary" %>
Вот и все. Теперь нам нужно только настроить Web.config. В него вносятся практически те же изменения, что и в конфигурационный файл консольного приложения:
<system.serviceModel>
<services>
<service name="ServiceLibrary.FirstService">
<endpoint
address=""
binding="wsHttpBinding"
contract="ServiceLibrary.IFirstService"/>
</service>
</services>
</system.serviceModel>
Единственным отличием является то, что мы не указываем адрес сервиса address="". Это связано с тем, что IIS сам даст адрес этому сервису, совпадающий с адресом его .scv–файла.
Теперь мы можем запустить наш Web-сайт и просмотреть страницу SimpleService.svc. Браузер покажет что-то, похожее на следуюшее:
Данная картинка говорит о том, что наш сервис удачно создан и готов к работе.
Публикация метаданных сервиса
Теперь наш сервис готов к использованию. Нам необходимо создать клиента – программу, которая будет использовать наш сервис, посылать к нему запросы и получать от него ответы. Однако здесь встает следующий вопрос. Как говорилось ранее, WCF позволяет создавать сервисы, доступные из-под множества языков и платформ. В мире уже существует множество сервисов, которые вы можете использовать. Но вам, несомненно, необходима некоторая информация об этих сервисах. Какими методами обладает сервис? Какую привязку нужно использовать для общения с ним? Откуда же нам можно получить эту информацию? Из метаданных сервиса.
Метаданные сервиса очень похожи на метаданные сборок .NET. Они фактически описывают сервис достаточным для клиента образом. Они несут информацию о методах, имеющихся на сервисе, об используемой привязке, о ее настройках. Все, что вам нужно для получения этой информации, это адрес сервиса.
Однако метаданные нужно опубликовать. По умолчанию они не предоставляются. Но не беспокойтесь, WCF делает эту задачу очень простой. Она сводится к внесению нескольких строчек текста в конфигурационный файл.
Сперва нужно создать «поведение сервиса». Фактически это описание некоторых особенностей работы хоста вашего сервиса. Оно непосредственно не влияет на взаимодействие сервиса и его клиента. Нужное нам поведение имеет вид:
<behaviors>
<serviceBehaviors>
<behavior name="FirstServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
Теперь это поведение нужно подключить к нашему сервису. Для этого используется аттрибут behaviorConfiguration элемента service:
<service name="ServiceLibrary.FirstService" behaviorConfiguration="FirstServiceBehavior">
Последнее, что осталось сделать, добавить к сервису еще одну конечную точку, которая будет публиковать метаданные:
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
Хорошей новостью является то, что вам не нужно реализовывать интерфейс IMetadataExchange. WCF сделает это за вас.
Теперь, просмотрев страницу нашего сервиса в браузере, мы можем видеть, что она несколько изменилась:
Это говорит о доступности метаданных сервиса.
В случае, если в качестве хоста используется консольное приложение, необходимо внести еще некоторые изменения. Дело в том, что IIS сам формирует полные адреса конечных точек. Однако в случае консольного приложения нам придется сделать это вручную. Проще всего это сделать с помощью базового адреса. Базовый адрес задает общую часть адреса всех конечных точек. То, что вы будете писать в аттрибуте address элемента endpoint будет добавляться к вашему базовому адресу. Добавить базовый адрес очень просто:
<service name="ServiceLibrary.FirstService" behaviorConfiguration="FirstServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:12324/SimpleService"/>
</baseAddresses>
</host>
<endpoint
address=""
binding="wsHttpBinding"
contract="ServiceLibrary.IFirstService"/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
</service>
Теперь конфигурационный файл консольного приложения стал очень похож на конфигурационный файл Web-сайта в плане настройки WCF. Как видно, IIS просто предоставляет базовый адрес для каждого своего сервиса.
Если вы запустите ваше консольное приложение и откроете указанный вами базовый адрес в браузере, то увидите ту же картинку, что и для Web-сервиса. Это говорит о готовности вашего сервиса к работе.