Pull to refresh

Коммуникационные привязки в 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 поможет создать заказную привязку.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.