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

Основы разработки WCF-служб. Часть 5. Размещение службы в отдельном процессе

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

Разработка клиентского приложения для WCF-службы проводится здесь: Основы разработки WCF-служб. Часть 4. Клиент для службы.

Задача: Разместите службу, созданную в процессе статьи: Основы разработки WCF-служб. Часть 3. Разработка простой WCF-службы, в отдельном исполняемом приложении.

Благодаря классу "ServiceHost" размещение службы в отдельном процессе – вполне тривиальная задача.
Создайте простое консольное приложение. Назовите его, например, "d_servicehost".

Как вы уже, наверное, заметили, физически служба WCF представляет собой dll-библиотеку. Чтобы разместить ее в исполняемом приложении, ее необходимо подключить. Для этого щелкните в "Обозревателе решений" по "Ссылки" и "Добавить ссылку".

Откроется окно добавления ссылки на библиотеки классов или пространства имен. Выберите вкладку "Обзор", а в ней выберите dll-библиотеку службы, созданную во время этой статьи: Основы разработки WCF-служб. Часть 3. Разработка простой WCF-службы. Возможно, она находится у вас по адресу: "/b_FirstService/b_FirstService/bin/Debug/b_FirstService.dll".

Название службы в виде "b_FirstService" должно появиться в области "Ссылки" "Обозревателя решений".

Кроме того, необходимо подключить пространство имен System.ServiceModel для работы с WCF. В прежних статьях Visual Studio делал это автоматически, но теперь нужно сделать это вручную. Щелкните по "Ссылки" и "Добавить ссылку". Во вкладке "Платформа" найдите и выберите "System.ServiceModel".

Затем подключите обе библиотеки в рамках вашей программы через "using":

Начнем писать код программы. Первой строкой инициализируем экземпляр класса "ServiceHost":

Однако как конструктор класс "ServiceHost" требует указать, какого типа службу необходимо запустить и по какому адресу это сделать. Тип службы определить легко – это и есть наша ранее созданная служба. Немного сложнее с адресом, но его можно взять откуда угодно: с любого файла app.config, с которыми мы работали ранее.

Откройте файл app.config для клиентского приложения из этой работы: Основы разработки WCF-служб. Часть 4. Клиент для службы. В области найдите адрес конечной точки, к которой должен подключаться клиент. Этот адрес и есть базовый адрес нашей службы. Скопируйте его.

Теперь модифицируем конструктор "ServiceHost" таким образом:

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

Кроме того, необходимо создать конечную точку – центр обмена сообщениями службы. У класса "ServiceHost" есть необходимый для этого метод "AddServiceEndpoint".

Любая конечная точка, как уже было сказано, характеризуется тремя составляющими: адресом, привязкой и контрактом. Поэтому при создании точки, необходимо указать ее адрес, привязку и контракт. Однако если адрес не указан, то конечная точка располагается по базовому адресу службы.

Так как у нас всего лишь одна конечная точка и очень простое приложение, то адрес конечной точки указывать не будем. Напишите в следующей строке:

Здесь b_FirstService.IWorkBook – это контракт службы, а BasicSHttpBinding – это та привязка, что поддерживает служба. Вы можете посмотреть конфигурационный файл любого ранее созданного приложения из предыдущих статей и заметите, что все они используют привязку BasicHttpBinding.

Как только конечная точка добавлена – владелец (хост) со службой готов к запуску. Произведем вызов метода Open для экземпляра "ServiceHost":

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

Выведем сообщение о том, что служба запущена.

И запросим от пользователя нажатия кнопки , чтобы не закрыться раньше времени:

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

В итоге, должен получиться примерно такой код:

Постройте и запустите приложение. Если будет выведено сообщение "Служба запущена", значит, служба готова к обработке клиентов. Запустите клиента из третьей работы. Его приложение находиться, скорей всего, по адресу: "\c_client\c_client\bin\Debug\c_client.exe". Поработайте с клиентом, убедитесь, что служба выполняет свои действия.

Попробуйте изменить привязку конечной точки службы с BasicHttpBinding() на WSHttpBinding(). Постройте и запустите службу. Запустите клиента вновь. Убедитесь, что клиент не может работать со службой, которая использует другую привязку. Также он не будет работать со службой по другому адресу или с другим контрактом.

В следующей статье рассматривается размещение службы как сервиса Windows: Основы разработки WCF-служб. Часть 6. Размещение WCF-службы как службы Windows.


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

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

URL-ссылка

https://artamonoviv.ru/articles/wcf_tutorial_5/