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

Основы разработки WCF-служб. Часть 1. Теория WCF.

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

Пара слов о WCF

Windows Communication Foundation (WCF) – это SDK (Software Development Kit), комплект средств для разработки и развертывания веб-служб для Windows. Иными словами, WCF – технология Microsoft, позволяющая разрабатывать сервис-ориентированные приложения и микросервисы.
Цель WCF – предоставить универсальную программную модель для построения распределенных приложений, позволить разрабатывать приложения, независимые от нижележащих технологий, использовать их для соединения служб и программ вместе. Эта достаточно сложно, если не невозможно: полностью отделить программную структуру приложения от коммуникационной инфраструктуры. Однако WCF позволило приблизиться к этой цели.

Клиенты и службы взаимодействуют через передачу сообщений. Сообщения могут передвигаться напрямую от службы к клиенты, или через посредников. В WCF все сообщения – это SOAP-сообщения. WCF-службы в отличие от базовой идеологии Web-служб могут работать через различные транспортные протоколы, не только через HTTP. WCF-клиенты могут работать с не-WCF-службами, так же как WCF-службы могут работать с не-WCF-клиентами.

Так как реализация службы скрыта от среды, WCF также предоставляет средства для демонстрации мета-данных, описывающих доступную функциональность служб и возможные пути коммуникации. Метаданные публикуются определенным, технологически-нейтральным способом, например, с использованием WSDL через HTTP, или через специальные стандарты обмена метаданными.

Поддержка сервис-ориентированности – одна из основных целей разработки WCF, и это включает:

  • Доступ к схеме, а не к классу. В отличие от других технологий распределенной коммуникации службы взаимодействуют с клиентами через хорошо описанный интерфейс. Он скрывает все детали реализации службы.
  • Службы и клиенты взаимодействуют через один интерфейс, однако они полностью независимы. Они могут быть написаны на разных языках, в разных средах, выполняться на разных ОС, иметь еще сотни отличий, но все же прекрасно взаимодействовать.
  • Явные границы. Целью моделей распределенных объектов, так как, например, DCOM было представление удаленных объектов такими же, как и локальных. С одной стороны, это упрощало разработку, но с другой стороны, это скрывало неизбежные отличия между удаленным и локальным объектами. WCF устраняет эту проблему и делает взаимодействие между клиентом и службой более явным, не стараясь скрывать факт распределенности.
  • Совместимость на основе соглашений и политик. Взаимодействие между программными системами строится на таких механизмах и стандартах, как WSDL или WS-Policy.

Для поддержки базовой технологии коммуникации WCF реализует т.н. WS-* спецификации веб-служб. Эти спецификации были созданы рабочими комитетами W3C, которые состояли из специалистов Microsoft, IBM, BEA и других поставщиков. Спецификации поддерживают несколько направлений, такие как: базовая передача сообщений, безопасность, надежность, управление транзакциями и работа с мета-данными служб:

  • Сообщения. SOAP - это основной протокол для веб-служб, описывающий структуру заголовков и тел сообщений. Стандарт WS-Addressing определяет дополнительные SOAP заголовки для адресации сообщений, которые освобождают SOAP от зависимости от нижележащих протоколов. Механизм оптимизации передачи сообщений (Message Transmission Optimization Mechanism (MTOM)) определяет оптимизированный формат SOAP-сообщений. Он основан на спецификации XOP (XML-binary Optimized Packaging).
  • Метаданные. Язык описания веб-служб описывает язык для спецификации служб и некоторые аспекты их использования. WS-Policy определяет динамические аспекты поведения служб, которые не могли быть описаны через WSDL. WS-MetadataExchange позволяет клиентам через SOAP запрашивать описание службы.
  • Безопасность. WS-Security, WS-Trust и WS-SecureConversation дополняют SOAP-сообщения информацией об аутентификации, целостности, конфиденциальности данных и о других аспектах безопасности.
  • Надежность. WS-ReliableMessaging определяет дополнительные SOAP-заголовки для обеспечения надежности коммуникации.
  • Управление транзакциями. Служба, построенная на базе WS-Coordination и WS-AtomicTransaction, позволяет использовать ACID-транзакции при SOAP-обмене сообщениями.

Архитектурные принципы WCF-приложений

Служба – это множество конечных точек (endpoints на англ., на русском также переводят как «оконечная точка»), которые предоставляют клиентам некоторые функции. Конечная точка – это сетевой ресурс, которому можно посылать сообщения. Чтобы воспользоваться предоставляемыми возможностями, клиент посылает сообщения конечным точкам такого типа, который описывается контрактом между клиентом и службой.

WCF всегда «присутствует» между службой и клиентом, перехватывая вызовы и осуществляя пред- и пост-обработку (рис. 13). Перехват начинается, когда прокси сериализует пакет вызова в сообщение и посылает сообщение ниже по цепочки каналов. Каждый канал со стороны клиента выполняет пред-обработку вызова сообщения. Точная структура и композиция цепочки зависит большей частью от привязки. Например, один канал может отвечать за кодирование сообщений, другой за безопасность передачи, третий за управление сессиями, четвертый за шифрование тела сообщения и так далее. Последний канал у клиента – это транспортный канал, который посылает сообщение к службе.

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

Служба выполняет запрос и возвращает контроль диспетчеру, который конвертирует возвращенное значение и информацию об ошибке (если есть) в сообщение для возврата. Диспетчер запускает сообщение через цепочку каналов, которые выполняют пост-операции вызова, такие как: управление транзакциями, деактивацию экземпляра службы, кодирование ответа, шифрование и т. д.

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

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


Ссылка на описание в РИНЦ