WCF - Подключение к локальному wcf-сервису по net.tcp
В данной статье я бы хотел рассказать о том, как можно на локальном компьютере в Visual Studio запустить wcf-сервис, который был бы доступен по протоколу net.tcp.
Итак, предположим, что у нас имеется приложение (в моём случае это web-сайт, хотя это и не обязательно), которое получает данные от десятка различных wcf-сервисов используя при этом NetTcpBinding. В один прекрасный момент у нас возникает желание выполнить отладку одного из этих сервисов. Используя IIS Express мы, конечно, можем запустить этот сервис локально, однако он будем доступен только по протоколу http. Это означает, что в файле конфигурации приложении нам придётся менять не только адрес сервиса, но и тип привязки, что в большинстве случаев не очень удобно (особенно если постоянно приходится переключаться с локального сервиса на нелокальный).
Попробуем запустить wcf-сервис на локальном компьютере таким образом, чтобы он был доступен по протоколу net.tcp.
Создание сервиса
Для начала создадим сам сервис.
Откроем Visual Studio и создадим новый проект (ASP.NET Empty Web Application). Назовём его Service. Добавим в проект wcf-сервис Hello.svc. Структура полученного проекта будет следующей:
Сам сервис будет содержать один метод SayHello. Он будет получать строку в параметре name (например, "World") и будет возвращать строку приветствия (например, "Hello, World!").
Создание хоста для сервиса
Теперь нам необходимо каким-то образом запустить сервис таким образом, чтобы к нему можно было обращаться по протоколу net.tcp.
Добавим к уже созданному проекту ещё один проект (Console Application). Назовём его Service.Host и добавим в него ссылки на проект Service и на сборку System.ServiceModel. После этого изменим код файла Program.cs следующим образом:
Тут всё достаточно просто. Мы используем два uri (serviceHttpAddress и serviceNetTcpAddress) которые определяют адреса, по которым сервис будет доступен после вызова метода Open объекта serviceHost, а чтобы приложение сразу же не закрылось, заставляем его ожидать, пока пользователь не нажмёт какую-нибудь клавишу.
Теперь если мы запустим это консольное приложение (делать это нужно с правами администратора), а сами откроем браузер и перейдём по адресу http://localhost:10001/HelloService/, то увидим стандартную страницу с информацией о сервисе. При этом, на этой странице будет сказано, что публикация метаданных о сервисе отключена.
Чтобы получить wsdl-файл c метаданными сервиса добавим в файл App.config следующие строки:
Теперь, если мы перезапустим наше консольное приложение и снова перейдём по адресу http://localhost:10001/HelloService/, то сможем получить ссылку на wsdl-файл, который необходим для генерации кода на клиенте.
Тестирование
Осталось убедиться, что сервис действительно доступен по протоколу net.tcp.
Создадим новый проект (Console Application). Назовём его Client и добавим в него ссылку на созданный нами сервис используя ссылку на wsdl-файл, полученную ранее (консольное приложение Service.Host в это время должно быть запущено, чтобы сервис был доступен).
Добавим конечную точку в файл конфигурации.
Изменим код файла Program.cs следующим образом:
Теперь, если мы сначала запустим консольное приложение Service.Host, а затем Client, то в последнее выведет нам строку:
Hello, World!
Таким образом наш сервис действительно доступен по протоколу net.tcp. С тем же успехом мы можем установить breakpoint`ы в wcf-сервисе и выполнять его отладку.
Комментариев нет :