Продолжается подписка на наши издания! Вы не забыли подписаться?

Введение в создание сервисов Windows Communication Foundation

Автор: Clemens Vasters
newtelligence AG
Опубликовано: 03.07.2006

Не так часто авторам технических статей доводится писать о совершенно новой технологии, а не о очередном применении или новых функциях уже существующей технологии. Это как раз такой случай – и вместо прямого перехода к классическому программистскому "Hello World", мы начнем с исследования Windows Communication Foundation (WCF) в стиле «Улицы Сезам». Но до того давайте разберемся, что такое Windows Communication Foundation и зачем Microsoft его делает.

Что такое Windows Communication Foundation?

Так что же такое Windows Communication Foundation? WCF – это следующее поколение платформы программирования от Microsoft и runtime-системы для создания, настройки и развертывания распределенных сетевых сервисов. WCF-runtime и его пространство имен System.ServiceModel, представляющее его главный программный интерфейс, это преемник технологий создания распределенных систем, успешно применяемых разработчиками для создания распределенных приложений на платформе Windows в последние десятилетие.

Начнем со следующего ценного наблюдения: современные технологии распределенных систем, из которых наиболее заметны ASP.NET Web Services (ASMX) с расширениями Web Service Enhancements (WSE), Microsoft Message Queue (MSMQ), среда Enterprise Services/COM+ и .NET Remoting, лежат в основе бесчисленных удачных приложений. Возможно, в этих приложениях что-то не так, если Microsoft хочет все их чем-то заменить? Нет, ничего – но их слишком много.

Используя ASMX и WSE можно создавать мощные взаимодействующие сервис-ориентированные приложения с Web-сервисами и их клиентами, допускающие кросс-платформенное взаимодействие и интеграцию, а также относительно легкое развитие сервисов и смену версий благодаря свободному связыванию. MSMQ предоставляет мощный механизм масштабируемых, надежных и гибких очередей сообщений, обеспечивающих надежное перемещение данных из одного места в другое. Enterprise Services обеспечивают интеграцию транзакций различных сторон, выполняющих совместную работу в распределенной среде, позволяют ограничивать доступ к дефицитным разделяемым ресурсам, позволяет создавать пулы экземпляров объекта для оптимизации доступа к ресурсам, чья инициализация обходится дорого, имеет механизм «издатель/подписчик» для событий, богатую модель безопасности, и является вершиной проверенных, интегрированных, безопасных и быстрых технологий. Последнее по порядку, но не по значению, Remoting, это интегрированный механизм Common Language Runtime (CLR) для связи между объектами через границы доменов приложений, который пользуется популярностью за свою крайне гибкую модель расширения.

Все это хорошо, за тем исключением, что часто приходится делать однозначный выбор между этими фундаментальными технологиями. Если вам нужны какие-то возможности Enterprise Services, и вы решаетесь использовать эту технологию, стратегия реализации будет совсем не та, что при использовании ASMX. Если вам нужен железобетонно надежный обмен сообщениями, и вы выбираете отправку сообщений через MSMQ вместо риска отправки их через HTTP, ваш код будет совсем не таким, как при вызове методов через прокси, если только вы не напишете связывающий код сами, или не используете возможности Queued Components из Enterprise Service (что возвращает нас к предыдущему случаю).

Цели WCF в том, что устранить необходимость такого выбора, и позволить реализовать любую комбинацию перечисленных требований на единой технологической платформе. Если вы хотите создать Web-сервис, поддерживающий сессии и транзакции, и расширить его возможностью проверки необработанных сообщений по мере их поступления в систему, WCF позволит это сделать. Сейчас сделать это (и это справедливо не только для платформы Microsoft) не то, чтобы невозможно, но долго, и от разработчика требуются знания перечисленных выше технологий на системном уровне.

WCF должно поднять продуктивность разработчиков, поскольку им придется иметь дело только с одной моделью программирования, объединяющей возможности ASMX, WSE, Enterprise Services, MSMQ и Remoting. При этом не нужно забывать, что WCF – это реализация стандартов WS-*, над которыми Microsoft с партнерами работали последние 5 лет – что обещает возможности взаимодействия между платформами, средами исполнения и языками программирования.

Что ж, после всех смелых обещаний, посмотрим на предмет разговора.

ABC Windows Communication Foundation

"ABC" – это мантра WCF. "ABC" – это ключ к пониманию того, как устроена конечная точка (endpoint) сервиса WCF.

Фанаты Web-сервисов, читающие WSDL-описания за завтраком, легко распознают в этих трех концепциях три уровня абстракции, выраженных в WSDL. Так что если вы живете в мире, полном угловых скобок, можете посмотреть на это так:

"ABC" означает, что написание (и настройка) WCF-сервиса – это всегда трехступенчатый процесс.

Важно отметить, что эти три элемента независимы. Контракт может поддерживать множество привязок, а привязка может служить для нескольких контрактов. У сервиса может быть сразу много конечных точек (контрактов, привязанных к адресам), доступных одновременно. Так что если вы хотите сделать сервис доступным через HTTP с использованием SOAP 1.1 для максимальной совместимости, а также через TCP с использованием передачи данных в бинарном виде для максимальной производительности, то две конечные точки вполне могут сосуществовать.

Конечно, отнюдь не все привязки обязательно удовлетворяют требованиям данного контракта или реализации сервиса. Если сервис, например, полностью зависит от определенных аспектов безопасности, надежного обмена сообщениями, транзакций или чего-либо еще, он может потребовать, чтобы любая используемая привязка поддерживала эти возможности. Если привязка не поддерживает нужных свойств, runtime WCF обнаружит несоответствие и откажется запускать сервис.

Определение контракта сервиса

Контракты WCF определяются одним из двух способов. Можно создать или взять где-нибудь описание WSDL-контракта и превратить его в описание WCF-контракта, используя утилиту svcutil.exe, поставляемую с WCF. «Описание WCF-контракта» означает, что утилита сгенерирует код, размеченный атрибутами метаданных, говорящими рантайму WCF о специфике данного определения контракта. В противоположность ASMX, где утилита wsdl.exe импортирует WSDL-описания либо в конкретные реализации прокси-классов, либо в конкретные (хотя и абстрактные) реализации серверных классов, утилита WCF генерирует описание контракта как объявление интерфейса, которое можно использовать как на стороне сервера, так и в прокси. Если вы хотите импортировать описание контракта для Microsoft TerraService, командная строка будет выглядеть примерно так:

...

Заключение

WCF – очень богатая платформа для создания распределенных систем, объединяющая коммуникации в стиле RPC и в стиле обмена сообщениями, эффективные бинарные коммуникации, оптимизированные для различных платформ и Web-сервисов, основанных на открытых стандартах, а также богатый набор возможностей обеспечения безопасности и обработки транзакций.

Даже оставляя в стороне все эти замечательные возможности, поистине удивительно – по крайней мере для автора – как просто и чисто выглядит модель программирования, и как гибко можно настраивать сервисы. Пусть даже это звучит непрофессионально. Создавать мощные сервисы с помощью WCF так просто, что это можно считать развлечением.

........................
"С полным содержанием данной статьи можно ознакомиться в печатной версии журнала"

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

Copyright © 1994-2016 ООО "К-Пресс"