Коммуникационные привязки в Windows Communication Framework (WCF)

Введение


Привязки описывают соглашения между клиентом и сервером о порядке передачи данных по сети. В привязке задается способ транспортировки, кодирование и протоколы, участвующие в коммуникации. WCF с помощью привязок инкапсулирует конфигурацию в различных сценариях коммуникации. Для наиболее распространенных сценариев – Web-служб, служб REST/POX и приложений на основе очередей – имеются уже готовые привязки. Например, привязка basicHttpBinding предназназначена для работы с Web-службами, созданными в ASP.NET или совместимыми со спецификацией WSI Basic Profile 1.1. Привязки ws2007HttpBinding и wsHttpBinding похожи на basicHttpBinding, но поддерживают больше возможностей, в частности надежную доставку и транзакции, а также основаны на более современных стандартах, таких, как WSAddressing. В таблице 1 перечислены 12 привязок, применяемых в разных сценариях коммуникации.

Таблица 1. Коммуникационные привязки WCF

  • basicHttpBinding Привязка для Web-служб, совместимых с WSI Basic Profile 1.1, в частности для ASMX-служб
  • wsHttpBinding Привязка для Web-служб с дополнительными возможностями, в частности WSSecurity, WSTransactions и т.п.
  • wsDualHttpBinding Привязка для поддержки двусторонней коммуникации с использованием дуплексных контрактов
  • webHttpBinding Привязка для поддержки REST/POX служб с использованием сериализации в форматах XML и JSON
  • netTcpBinding Привязка для коммуникаций между двумя .NET-системами
  • netNamedPipeBinding. Привязка для коммуникаций в рамках одной машины или между несколькими .NET-системами
  • netMsmqBinding Привязка для асинхронных коммуникаций с использованием Microsoft Message Queue (MSMQ)
  • netPeerTcpBinding Привязка для построения приложений в пиринговых сетях
  • msmqIntegration Привязка для отправки и получения Binding сообщений приложениям с помощью очередей MSMQ
  • wsFederationHttp Привязка для продвинутых Binding Web-служб, совместимых со стандартами WS*, с помощью интегрированной идентификации (federated identity)
  • ws2007HttpBinding Привязка, производная от wsHttpBinding, с дополнительной поддержкой самых последних специ фикаций WS*, вышедших в 2007 году
  • ws2007Federation Привязка, производная HttpBinding от wsFederationHttpBinding, с дополнительной поддержкой самых последних спецификаций WS*, вышедших в 2007 году

Привязки, перечисленные в таблице 1, можно задавать как в коде, так и в конфигурационном файле. В листинге 1 показано, как привязка basicHttpBinding задается в конфигурационном файле. Задавая привязку таким образом, разработчик может затем заменить ее на другую или модифицировать параметры, не перекомпилируя приложение.

Листинг 1. Задание привязки в конфигурационном файле

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
 <client>
  <endpoint address="http://localhost/helloworld"
       binding="basicHttpBinding"
       contract="WCF.HelloWorld">
  </endpoint>
 </client>
</system.serviceModel>
</configuration>


В листинге 2 показано использование класса BasicHttpBinding. Задавая конкретную привязку в коде, разработчик не дает изменить ее впоследствии.

Листинг 2. Задание привязки в коде

using System;
using System.Collections.Generic;
using System.Net;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Channels;
namespace WCF
{
class Program
{
 static void Main(string[] args)
 {
   BasicHttpBinding binding = new BasicHttpBinding();
   using (HelloWorldClient client =
      new HelloWorldClient(Binding,
      "http://localhost/helloworld"))
   client.SayHello("Habr");
   Console.ReadLine();
 }
}
}


Выбор подходящей привязки


В WCF существует девять готовых привязок. Каждая из них отвечает потребностям одного конкретного способа распределенных вычислений. На выбор привязки оказывают влияние несколько факторов, в том числе безопасность, интероперабельность, надежность, производительность и транзакционность. Чтобы выбрать привязку, вы должны изучить потребности приложения и решить, какая привязка наилучшим образом удовлетворяет требованиям. Так, если приложение должно обмениваться данными по ненадежной (к примеру, беспроводной) сети, то стоит подумать о привязке, поддерживающей надежные сеансы (reliable sessions – RS). На рис. 1 изображена блок-схема принятия решения о выборе привязки. При выборе привязки приходится рассматривать много разных факторов. Перечислить их все невозможно, поэтому будьте готовы к проведению дополнительного анализа. Каждая привязка поддерживает какой-то один сценарий коммуникаций, например: межмашинная, локальная или интероперабельная с использованием Web-служб.

Рис. 1. Выбор привязки



Заключение


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

  • привязка netTcpBinding предназначена для межмашинных коммуникаций между .NETприложениями;
  • привязка netNamedPipeBinding предназначена для локальных коммуникаций между .NETприложениями – как между несколькими процессами, так и внутри одного процесса (междоменных и внутридоменных);
  • привязка basicHttpBinding служит для поддержки унаследованных Webслужб, основанных на спецификации WSI Basic Profile 1.1. Как правило, она используется для потребления ASMXслужб, созданных
  • в ASP.NET, но годится и для предоставления служб клиентам на платформе .NET 2.0, не нуждающимся в спецификациях WS*;
  • привязки ws2007HttpBinding и wsHttpBinding применяются для создания Web-служб, поддерживающих спецификации WS*. При создания новых служб в WCF рекомендуется применять привязку ws2007HttpBinding, поскольку она поддерживает новейшие стандарты в области безопасности,
  • надежной доставки сообщений и транзакционности;
  • есть еще три привязки, основанные на Webслужбах: wsDualHttpBinding, wsFederationHttpBinding и ws2007FederationHttpBinding. Пользуйтесь ими, если возникает потребность в дуплексном обмене сообщениями по протоколу HTTP или интегрированной безопасности соответственно. Привязка ws2007FederationHttpBinding входит в состав .NET 3.5 и дополнительно поддерживает спецификацию WSS SAML Token Profile 1.1;
  • привязка netMsmqBinding применяется для разработки несвязанных приложений с помощью технологии Microsoft Message Queue (MSMQ);
  • привязка msmqIntegrationBinding служит для интеграции с существующими приложениями на базе MSMQ;
  • стек каналов в WCF можно конструировать самостоятельно, что позволяет создавать заказные привязки. С их помощью можно организовать коммуникацию, не поддерживаемую ни одной из готовых привязок;
  • WCF поддерживает раскрытие служб с помощью нескольких привязок. Это позволяет обеспечить оптимальную работу служб с разнородными клиентами;
  • пользуйтесь готовыми привязками, если они отвечают вашим требованиям; в противном случае класс CustomBinding поможет создать заказную привязку.


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.