Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Технология WCF.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
470.94 Кб
Скачать

Развертывание 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-сервиса. Это говорит о готовности вашего сервиса к работе.