Привязки описывают соглашения между клиентом и сервером о порядке передачи данных по сети. В привязке задается способ транспортировки, кодирование и протоколы, участвующие в коммуникации. 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-служб.
Заключение
Архитектура каналов позволяет построить унифицированную модель разработки распределенных приложений. Службы можно создавать независимо от транспортных протоколов и кодировок, а, стало быть, они могут поддерживать различные виды коммуникации. Привязки – это заранее сконфигурированные стеки каналов для коммуникаций определенного вида. В комплекте с 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поможет создать заказную привязку.