Windows Communication Foundation (WCF) служба
Опубликовано shwan в 13.01.2018 13.01.2018
Windows Communication Foundation (WCF) — программный фреймворк, используемый для обмена данными между приложениями, входящий в состав .NET Framework. Другим словами, WCF – это программная платформа от Microsoft для создания, настройки и развертывания распределенных сетевых сервисов.
Давайте рассмотрим процесс создания и вызова службы WCF.
Создание службы WCF
Для начала необходимо создать новый проект WCF. Пусть наша Windows Communication Foundation служба будет возвращать количество оставшихся дней до нового года.
Visual studio создаст интерфейс и класс службы по умолчанию с именем IService1.cs и Service1.svc.
Нам необходимо переименовать их в соответствии с нашей предметной областью.
Давайте рассмотрим интерфейс INewYearService. Для начала нам необходимо в теле интерфейса объявить метод, который будет предоставлять служба для вызова. Для этого его необходимо пометить атрибутом [OperationContract].
Как вы видите данный метод возвращает экземпляр класса TimeToNewYear. Это вспомогательный класс, содержащий значения времени до нового года. Ниже приведена его структура. Для того, чтобы данный класс можно было использовать в качестве возвращаемого аргумента, его необходимо пометить атрибутом [DataContract], а свойства, доступные для чтения клиенту в возвращаемом значении помечаются атрибутом [DataMember].
Теперь нам остается реализовать интерфейс Windows Communication Foundation службы в классе NewYearService.svc.cs следующим образом:
Давайте проверим работу нашей службы wcf. Для этого нажмем кнопку Начать отладку. Обратите внимание, что возможные два варианта поведения системы. Если мы начнем отладку находясь в NewYearService.svc, от откроется отладчик службы. Во всех остальных случаях откроется окно браузера. Давайте рассмотрим каждый из вариантов подробнее.
Браузер
После запуска отладки отобразится браузер с файловой структурой нашей службы wcf.
Нам необходимо нажать на ссылку с именем нашей службы NewYearService.svc. Если все работает корректно, то мы увидим следующее окно, иначе будет показано сообщение с ошибкой.
Тестовый клиент WCF
В левой верхней части отладчика можно увидеть структура нашей службы wcf. Для проверки нашего метода выполним двойной щелчок левой кнопкой мыши по его имени. В правой части отладчика откроется форма запроса. Мы можем указать значение, которое будет передано в метод.
После установки передаваемых значений необходимо нажать кнопку Вызвать. Появится предупредительное сообщение. Можно смело ставить галочку Не выводить это сообщение в дальнейшем и нажимать кнопку ОК.
После этого в нижней правой части отладчика будет отображены значения возвращаемые нашей службой wcf.
Консольный клиент для WCF
Теперь нам необходимо создать клиент, который будет обращаться к нашей службе wcf. Для этого для начала создадим новое консольное приложение.
В созданном консольном приложении нам необходимо добавить ссылку на службу wcf.
В открывшимся окне службы необходимо указать имя службы wcf и ввести ее адрес.
Для простоты можно нажать кнопку Найти, тогда адрес службы wcf будет определен автоматически.
После этого необходимо развернуть дерево Windows Communication Foundation службы, чтобы удостоверится что выбран правильность выбора. В правой части должен быть отображен вызываемый метод.
Если настройка прошла корректно, то в обозревателе решения в консольном приложении отобразится ссылка на нашу службу wcf.
Теперь нам остается только обратиться к нашей службе, чтобы взывать метод и вывести результат на экран.
Перед началом отладки не забудьте установить консольное приложение автозагружаемым проектом. Получаем следующий результат.
Web клиент для WCF
Теперь рассмотрим, как нам обратиться к службе wcf из веб-приложения. Процесс подключения службы не отличается от подключения в консольном приложении. Давайте рассмотрим как можно настроить авторизацию с помощью Windows. Это потребует дополнительной настройки приложения. Для начала создадим проект нового MVC приложения.
Нажимаем кнопку ОК, и попадаем в меню настройки создания веб-приложения. Выберем MVC шаблон и изменим способ авторизации. Для этого нажмем на кнопку Изменить способ проверки подлинности.
Выбираем авторизацию с помощью Windows и нажимаем ОК в обоих окнах.
Теперь необходимо будет подождать кое-то время, чтобы создался проект и все библиотеки были загружены и подключены.
Для того, чтобы IISExpres перестала ругаться на нас за попытку создания windows-аутентификации нужно сделать ряд действий в наше службе.
Нужно дополнить наш web.config
Добавляем в любую точку раздела , если отсутствует раздел webServer или дополняем уже существующий.
Находим раздел и в нем вставляем следующее.
Далее нужно указать разделы биндинг и сервис
Раздел дополняем такой вот строчкой. В ней мы говорим, что именно такая схема аутентификации будет использоваться у нас.
На этом настройка web.config заканчивается. В итоге у нас должен получиться файл примерно следующего содержания.
Настройка applicationhost.config
Далее идем в папку vs нашего проекта (она скрыта по умолчанию). В ней ищем папку config, а уже в ней находим файл applicationhost.config, его то нам нужно будет поправить.
Находим вот такой раздел. Все Deny меняем на Allow, разрешая изменение установленного по умолчанию режима аутентификации.
Далее находим данную настройку. В ней false меняем на true, разрешая механизму работать.
И под конец находим вот эту настройку. Тут мы true меняем на false. Говоря нашему IISExpres, чтобы он не блокировал службу windows-аутентификации.
После этого сохраняем все конфигурационные файлы и пробуем сделать ссылку на службу wcf аналогично как при добавлении службы в консольное приложение.
Изменим контроллер главной страницы web-приложения, чтобы взывать нашу службу wcf.
Теперь нам осталось только изменить представление, чтобы вывести результат работы Windows Communication Foundation службы на экран пользователя.
Получаем следующий результат работы веб-приложения.
Итоги WCF
Исходный код приложения можно скачать из репозитория https://github.com/shwanoff/wcf.
Мы подробно рассмотрели процесс создания и настройки Windows Communication Foundation службы, а также продемонстрировали как можно подключится к wcf через консольное и веб-приложение. Также рекомендую прочитать статью Принципы SOLID C#. И не забудьте подписывайтесь на группу ВКонтакте, Telegram и YouTube-канал. Там еще больше полезного и интересного для программистов.
Учебник: Начало работы с приложениями Windows Communication Foundation Tutorial: Get started with Windows Communication Foundation applications
Следующие учебники познакомят вас с опытом программирования Фонда коммуникаций Windows (WCF). The following series of tutorials introduce you to the Windows Communication Foundation (WCF) programming experience. Работа явивая эти учебники для того, чтобы дать вам вводное понимание шагов, необходимых для создания приложений WCF. Working through these tutorials in order will give you an introductory understanding of the steps required to create WCF applications. После завершения работы у вас будет запущенная служба WCF и клиент WCF, который звонит в службу. After you finish, you’ll have a running WCF service and a WCF client that calls the service.
Учебник предполагает, что вы используете Visual Studio в качестве среды разработки. The tutorial assumes you’re using Visual Studio as the development environment. Если вы используете другую среду разработки, игнорируйте инструкции Visual Studio. If you’re using another development environment, ignore the Visual Studio-specific instructions.
Для примера приложений WCF, которые можно загрузить и запустить, см. For sample WCF applications that you can download and run, see Windows Communication Foundation samples. Для введения в образцы, см. Начало образца. For an introduction to the samples, see Getting started sample.
Для получения более подробной информации о создании сервисов и клиентов, см. For more in-depth information about creating services and clients, see Basic WCF programming.
Учебники WCF WCF tutorials
В первых трех учебниках описывается, как определить контракт на обслуживание WCF, как его реализовать и как его разместить. The first three tutorials describe how to define a WCF service contract, how to implement it, and how to host it. Создаваемый сервис является самоуправляемым в приложении консоли. The service that you create is self-hosted within a console application. Вы также можете размещать услуги в рамках служб ы информации о Интернете (IIS). You can also host services under Microsoft Internet Information Services (IIS). Для получения дополнительной информации см. For more information, see How to: Host a WCF Service in IIS. Хотя вы используете код для настройки службы в учебнике, вы также можете настроить службы в файле конфигурации. Although you use code to configure the service in the tutorial, you can also configure services within a configuration file.
Вы создаете контракт WCF с пользовательским интерфейсом. You create a WCF contract with a user-defined interface. Этот контракт определяет функциональность, которую предоставляет служба. This contract defines the functionality that the service exposes.
После определения контракта необходимо реализовать его с помощью класса обслуживания. After you define a contract, you must implement it with a service class.
Настройте конечную точку для службы и разместите службу в консольном приложении. Configure an endpoint for the service and host the service in a console application. Чтобы служба стала активной, необходимо настроить ее и разместить в среде выполнения времени. For a service to become active, you must configure it and host it within a run-time environment. Эта среда времени выполнения создает службу и контролирует ее контекст и срок службы. This run-time environment creates the service and controls its context and lifetime.
Следующие два учебника описывают, как создавать, настраивать и использовать клиентское приложение для вызова операций, которые предоставляет служба. The next two tutorials describe how to create, configure, and use a client application to call the operations the service exposes. Службы публикуют доступные метаданные, определяющие сведения, необходимые клиентским приложениям для взаимодействия со службой. Services publish metadata that define the information a client application needs to communicate with the service. Visual Studio автоматизирует процесс доступа к этим метаданным и использует их для построения клиентского приложения для службы. Visual Studio automates the process of accessing this metadata and uses it to construct the client application for the service. Если вы решите не использовать Visual Studio, вы можете использовать инструмент ServiceModel Metadata Utility (Svcutil.exe) вместо этого. If you decide not to use Visual Studio, you can use the ServiceModel Metadata Utility tool (Svcutil.exe) instead.
Извлекать метаданные для создания прокси-сервера клиента WCF из службы WCF. Retrieve metadata for creating a WCF client proxy from a WCF service. Вы получаете метаданные с помощью Visual Studio для добавления ссылки на услуги или можете использовать инструмент ServiceModel Metadata Utility. You retrieve metadata by using Visual Studio to add a service reference or you can use the ServiceModel Metadata Utility tool. Вы указываете конечную точку, которую клиент использует для доступа к службе. You specify the endpoint that the client uses to access the service.
Используйте прокси-сервер клиента WCF для вызова службы операций. Use the WCF client proxy to call the service operations.