Веб-сервисы, Программирование, Сервис-ориентированные системы

Основы разработки WCF-служб. Часть 8. Публикация метаданных

Для приложения, созданного в ходе предыдущей работы, делаем публикацию метаданных через протокол HTTP. Основы разработки WCF-служб. Часть 8. Публикация метаданных
Иван Артамоновhttps://artamonoviv.ru/images/icon/logo.png
Внимание! Эта статья была опубликована в 2012 году в книге "Разработка распределенных сервисно-ориентированных программных средств". Использование материалов из нее разрешено только при правильной библиографической ссылке (для докладов, курсовых работы, рефератов, дипломных и пр. научных работ) или url-ссылки (для сайтов). Библиографическое описание дано в конце статьи.
PDF-версия статьи: скачать
Для приложения, созданного в ходе предыдущей работы, делаем публикацию метаданных через протокол HTTP.

Задача: Для приложения, созданного в ходе статьи Основы разработки WCF-служб. Часть 7. Добавление нескольких конечных точек службы, осуществить публикацию метаданных через протокол "http".

У службы есть два способа опубликовать свои метаданные. Можно предоставить метаданные через HTTP-протокол, или использовать выделенную конечную точку. Публикация метаданных осуществляется через отдельную конечную точку. Чтобы служба автоматически обрабатывала запросы к этой точке, необходимо обозначить для нее специальное поведение.

Откройте проект, созданный в ходе предыдущей статьи (если вы не желаете терять код этой работы, то следует скопировать папку проекта в отдельное место).

1. Просмотр состояния публикации метаданных.

Запустите службу. В прошлой работе для службы был выделен базовый адрес:

Откройте этот адрес в любом браузере. Вы получите такую страницу:

На этой странице вам сообщается, что служба не публикует метаданные, а, следовательно, о ее работе сложно будет узнать потенциальным клиентам (как мы помним, клиента для статьи Основы разработки WCF-служб. Часть 4. Клиент для службы мы делали по службе из 3-ой статьи цикла, где публикация метаданных автоматически была подключена Visual Studio. Начиная со статьи №5 за публикацию метаданных должен отвечать разработчик, то есть вы).

2. Добавление точки обмена метаданными через код службы.

Как уже отмечалось, службу можно конфигурировать не только через app.config, но и непосредственно в программном коде. Сделаем так, чтобы обычные конечные точки поддерживались через app.config, а mex задавалась в коде службы.

Остановите службу. Откройте код службы и между строчками

и

добавьте код:

Кроме того, подключите пространство имен:

В этом коде для владельца службы инициируется поведение обмена метаданными с помощью класса ServiceMetadataBehavior. Включается обмен данными через протокол http строкой:

Далее для службы вводится новая конечная точка обмена метаданными.
Запустите службу. Обновите страницу браузера. Должно отобразиться окно, в котором указывается, что метаданные опубликованы, и предлагается их получить по адресу: http://localhost:8080/bookservice?wsdl

Перейдите по этому адресу, и вы убедитесь в том, что интерфейсы и контракты службы описаны на языке WSDL. Здесь есть описание и класса Book, и класса WorkBook со всеми его операциями.

3. Добавление поведения службы через конфигурационный файл для обмена метаданными

Теперь попробуем включить поддержку метаданных исключительно через конфигурационный файл. Произведем эти операции через автоматизированный редактор.

Остановите службу. Удалите весь код, который мы писали в этой работе ранее.

Вызовите редактор конфигурации службы WCF для файла "App.config", так же, как и в 7-ой статье. В списке конфигурации перейдите к разделу "Advanced", а далее "ServiceBehaviors". Нажмите "New Service Behavior Configuration".

В появившемся разделе "Behavior: NewBehavior" нажмите "Add" и добавьте элемент "serviceMetadata". Далее для поведения "NewBehavior" будет создан новый элемент "serviceMetadata".

Перейдите к нему и для параметра "HttpGetEnabled" поставьте значение "True". Это позволит службе публиковать метаданные через протокол http.

Далее перейдите к основным настройкам службы, разделу "b_FirstService.WorkBook". Там, для параметра "BehaviorConfiguration" выставьте значение в виде "NewBehavior".

Сохраните конфигурацию. Закройте редактор. Запустите службу. Если при запуске произойдет ошибка, проверьте ваш файл "App.config" на наличие подключения сертификатов X.509.

4. Проверка работы службы

Итак, сторонние клиенты и службы могут автоматически получить информацию о нашей службе. Проверим это через "Тестовый клиент WCF". Запустите командную строку Visual Studio 2008. Пропишите:

Если вы воспользовались предложенным базовым адресом, то строка должна выглядеть так:

Нажмите "Enter". Запуститься тестовый клиент, в течение нескольких секунд он будет считывать данные и формировать свой интерфейс.

Потом он отобразит все множество конечных точек службы, которые работают с одним контрактом "IWorkBook". У точек будет одинаковый набор операций, так как контракт для них один и тот же. Проверьте работу клиента с разными конечными точками, отметьте для себя, что все изменения, которые производятся через одну точку, доступны и через другие точки.

5. Добавление точки обмена метаданными через конфигурационный файл

Для работы с другими WCF-приложениями иногда необходимо создать конечную точку, которая обрабатывает запросы на метаданные через привязку "mexHttpBinding". Создадим такую точку. В самом начале этой работы мы уже включали эту конечную точку таким кодом:

Но теперь добавим эту точку через конфигурационный файл. Откройте интерфейс добавления новой конечной точки. В первом окне при выборе контракта нажмите "Обзор" ("Browse") в появившемся окне выберите глобальный кэш сборок GAC.

В списке пространств имен выберите "System.ServiceModel", а в нем контракт - "IMetadataExchange". Далее способ коммуникации – "HTTP". Метод взаимодействия "Basic". Адрес: "mex". Нажмите , и редактор откроет настройки только что созданной конечной точки.

Однако для этой точки необходимо будет изменить параметры привязки: значение атрибута "Binding" смените на "mexHttpBinding". Сохраните конфигурацию и закройте редактор. Конечная точка для публикации метаданных готова.

Откройте файл "App.config". Он должен выглядеть примерно так:

 

Обратите внимание на строки, отмеченные полужирным. Именно они были созданы нами в процессе работы с редактором конфигурации. В принципе, вы можете повторять эти строки для любых своих служб напрямую в файле app.config, и служба будет поддерживать публикацию метаданных.

В следующей статье рассматривается размещение службы таким образом, чтобы клиенты могли работать с ней по локальной сети или в интернете: Основы разработки WCF-служб. Часть 9. WCF-службы в локальной сети и интернете.


Библиографическое описание

Артамонов, И. В. Разработка распределенных сервисно-ориентированных программных средств / Иван Васильевич Артамонов. – Иркутск : БГУЭП, 2012. – 130 с.

URL-ссылка

https://artamonoviv.ru/articles/wcf_tutorial_8/