Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы / Лабораторная работа 1 / ПКРПСиБД LAB1 Бочаров И.А..docx
Скачиваний:
34
Добавлен:
28.06.2014
Размер:
550.19 Кб
Скачать

Базовая композиция приложения wcf

При построении распределенной системы WCF обычно создаются три взаимосвязанных сборки.

  • Сборка службы WCF.Эта библиотека *.dll содержит классы и интерфейсы, представляющие обитую функциональность, которая предлагается внешним клиентам.

  • Хост службы WCF.Этот программный модуль — сущность, которая принимает в себе сборку службы WCF.

  • Клиент WCF.Это приложение, которое обращается к функциональности службы через промежуточный прокси.

Хосты и клиенты взаимодействуют друг с другом, согласовывая так называемые ABC— условное наименование для запоминания основных строительных блоков приложенияWCF, таких как адрес, привязка и контракт (address,binding,contract—ABC).

  • Адрес. Описывает местоположение службы. В коде представлен типомSystem.Uri, однако значение обычно хранится в файлах *.сonfig.

  • Привязка.WCFпоставляется с множеством различных привязок, которые указывают сетевые протоколы, механизмы кодирования и транспортный уровень.

  • Контракт. Предоставляет описание каждого метода, представленного службойWCF.

Понятие контракта является ключевым при построении службы WCF Хотя это и не обязательно, подавляющее большинство приложений WCF будут начинаться с определения типов интерфейсов .NET, используемых для представления набора членов, которые поддерживаются данной службой WCF. В частности, интерфейсы, которые представляют контракт WCF, называются контрактами служб. Классы (или структуры), которые реализуют их, носят название типов служб.

Контракты служб WCF оснащаются различными атрибутами, наиболее часто используемые из которых определены в пространстве имен System.ServiceModel. Когда члены контракта службы (методы в интерфейсе) содержат только простые типы данных (такие как числовые, булевские и строковые), полную службу WCF можно построить, используя одни только атрибуты [ServiceContract] и [OperationContract].

Как только контракт (или набор контрактов) определен и реализован внутри библиотеки службы, следующий логический шаг состоит в построении агента хостинга для самой службы WCF. Как уже упоминалось, на выбор доступно множество возможных вариантов хостов, и все они должны указывать привязки, используемые удаленными клиентами для получения доступа к функциональности типа службы. Выбор из набора привязок — это область, которая отличает разработку WCF от .NET Remoting и/или разработки веб-служб XML. На выбор в WCF доступно множество возможных привязок, каждая из которых ориентирована на определенные потребности. Если ни одна из готовых привязок не удовлетворяет существующим требованиям, можно создать собственную привязку, расширив тип CustomBinding (это в главе делаться не будет). Привязка WCF может описывать следующие характеристики:

  • транспортный уровень, используемый для передачи данных (HTTP, MSMQ, именованные каналы и TCP);

  • каналы, используемые транспортом (однонаправленные, запрос-ответ и дуплексные);

  • механизм кодирования, используемый для работы с данными (XML и двоичный);

  • любые поддерживаемые протоколы веб-служб (если разрешены привязкой), такие как WS-Security,WS-Transactions,WS-Reliabilityи т.д.

Как только контракты и привязки установлены, финальный элемент мозаики состоит в указании адреса для службы WCF. Это важно, поскольку удаленные клиенты не смогут взаимодействовать с удаленными типами, если им не удастся найти их. Подобно большинству аспектов WCF, адрес может быть жестко закодирован в сборке (с использованием типа System.Uri) или вынесен в файл *.config.

В любом случае точный формат адреса WCF отличается в зависимости от выбранной привязки (на основе HTTP, именованных каналов, TCP или MSMQ). На самом высоком уровне адреса WCF могут указывать перечисленные ниже единицы информации.

  • Scheme.Транспортный протокол (HTTP и т.п.).

  • MachineName.Полностью квалифицированное доменное имя машины.

  • Port.Во многих случаях не обязательный параметр. Например, привязка HTTP по умолчанию использует порт 80.

  • Path.Путь к службе WCF

Эта информация может быть представлена следующим обобщенным шаблоном (значение Port необязательно, поскольку некоторые привязки его не используют):

Scheme : //<MachineName-> [ : Port] /Path