Экспорт (0) Печать
Развернуть все
0 из 1 оценили этот материал как полезный - Оценить эту тему

Привязки Service Bus

Обновлено: Январь 2014 г.

Пакет SDK для Windows Azure включает в себя набор привязок WCF, которые автоматизируют интеграцию служб и клиентов WCF со службой ретрансляции, предлагаемой Шина обслуживания Windows Azure. В большинстве случаев необходимо просто заменить текущую привязку WCF одной из привязок ретрансляции Service Bus.

В следующей таблице приведены все привязки Service Bus WCF и соответствующие им стандартные привязки WCF. Для каждой часто используемой привязки WCF, например System.ServiceModel.BasicHttpBinding, T:System.ServiceModel.WebHttpBinding, System.ServiceModel.WS2007HttpBinding и System.ServiceModel.NetTcpBinding, существует соответствующая привязка Service Bus с очень похожим именем (просто вставьте "Relay" перед "Binding"). Существует всего несколько привязок ретрансляции, например Microsoft.ServiceBus.NetOnewayRelayBinding и Microsoft.ServiceBus.NetEventRelayBinding, у которых нет соответствующей привязки WCF.

 

Стандартная привязка WCF Соответствующая привязка ретрансляции

System.ServiceModel.BasicHttpBinding

Microsoft.ServiceBus.BasicHttpRelayBinding

System.ServiceModel.WebHttpBinding

Microsoft.ServiceBus.WebHttpRelayBinding

System.ServiceModel.WS2007HttpBinding

Microsoft.ServiceBus.WS2007HttpRelayBinding

System.ServiceModel.NetTcpBinding

Microsoft.ServiceBus.NetTcpRelayBinding

Недоступен

Microsoft.ServiceBus.NetOnewayRelayBinding

Недоступен

Microsoft.ServiceBus.NetEventRelayBinding

Привязки ретрансляции работают аналогично стандартным привязкам WCF. Например, они поддерживают различные версии сообщений WCF (SOAP 1.1, SOAP 1.2 и "Нет"), различные сценарии безопасности WS-*, надежный обмен сообщениями, потоковую передачу, обмен метаданными, веб-модель программирования (например, [WebGet] и [WebInvoke]), а также многие другие стандартные функциональные возможности WCF. Есть лишь несколько функциональных возможностей WCF, которые не поддерживаются, включая поток атомарных транзакций и аутентификацию на транспортном уровне.

Если вы знаете, как работает WCF, то можете заинтересоваться тем, как новые привязки (приведенные ранее в этом разделе) сопоставляются с базовыми элементами привязки транспорта WCF. В следующей таблице приводится элемент привязки транспорта для каждой привязки ретрансляции. Как видно, пакет SDK включает в себя несколько новых элементов привязок транспорта WCF, в том числе Microsoft.ServiceBus.HttpRelayTransportBindingElement, Microsoft.ServiceBus.HttpsRelayTransportBindingElement, Microsoft.ServiceBus.TcpRelayTransportBindingElement и Microsoft.ServiceBus.RelayedOnewayTransportBindingElement.

 

Привязка ретрансляции Элемент привязки транспорта

Microsoft.ServiceBus.BasicHttpRelayBinding

Microsoft.ServiceBus.HttpRelayTransportBindingElement

Microsoft.ServiceBus.HttpsRelayTransportBindingElement

Microsoft.ServiceBus.WebHttpRelayBinding

Microsoft.ServiceBus.HttpRelayTransportBindingElement

Microsoft.ServiceBus.HttpsRelayTransportBindingElement

Microsoft.ServiceBus.WS2007HttpRelayBinding

Microsoft.ServiceBus.HttpRelayTransportBindingElement

Microsoft.ServiceBus.HttpsRelayTransportBindingElement

Microsoft.ServiceBus.NetTcpRelayBinding

Microsoft.ServiceBus.TcpRelayTransportBindingElement

Microsoft.ServiceBus.NetOnewayRelayBinding

Microsoft.ServiceBus.RelayedOnewayTransportBindingElement

Microsoft.ServiceBus.NetEventRelayBinding

Microsoft.ServiceBus.RelayedOnewayTransportBindingElement

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

NetMessagingBinding

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

NetOnewayRelayBinding

NetOnewayRelayBinding — это самая ограниченная из всех привязок ретрансляции, так как поддерживает только односторонние сообщения. Однако она оптимизирована специально для этого сценария. По умолчанию привязка NetOnewayRelayBinding использует SOAP 1.2 через TCP вместе с двоичным кодированием сообщений, хотя эти настройки связи можно настроить с помощью стандартных привязок. Службы, использующие эту привязку, всегда должны использовать схему протокола "sb".

При использовании этой привязки в конфигурации по умолчанию локальная служба WCF пытается установить исходящее подключение к службе ретрансляции для создания двунаправленного сокета. В этом случае всегда создается защищенное подключение TCP/SSL по исходящему порту 9351. Во время подключения служба WCF выполняет проверку подлинности (путем предоставления маркера, полученного от Управление доступом), указывает в службе ретрансляции имя для прослушивания и оповещает службу ретрансляции о типе создаваемого прослушивателя. Если клиент WCF использует эту привязку в конфигурации по умолчанию, создается подключение TCP с ретрансляцией по порту 9350 (TCP) или 9351 (TCP/SSL) в зависимости от конфигурации привязки. Во время подключения клиент должен пройти проверку подлинности на ретрансляторе путем предоставления маркера, полученного из Управление доступом. После успешного подключения клиента он может отправлять односторонние сообщения Service Bus для их последующей «ретрансляции» в локальную службу по TCP-подключению.

Если задать значение свойства режима безопасности привязки NetOnewayRelayBinding, равным значению Transport, канал будет нуждаться в SSL-защите. В этом случае весь трафик, переданный через службу ретрансляции, будет защищен с помощью SSL, однако важно понимать, что сообщение будет передаваться через службу ретрансляции открытым текстом. Если необходимо обеспечить полную конфиденциальность, следует использовать режим безопасности Message, что позволяет шифровать в сообщениях, передаваемых через службу ретрансляции, все, кроме сведений об адресе.

Привязка NetOnewayRelayBinding нуждается в том, чтобы все операции с контрактом службы помечались как односторонние операции (IsOneWay=true). В этом случае для использования привязки WCF укажите нужные значения в определениях конечной точки и предоставьте необходимые учетные данные.

Системный режим подключения

При использовании NetOnewayRelayBinding локальная служба WCF подключается по умолчанию к службе ретрансляции через протокол TCP. При работе в сетевой среде, которая не допускает какие-либо исходящие TCP-подключения, кроме HTTP(s), можно настроить различные привязки ретрансляции для использования более «агрессивного» режима подключения, который позволит обойти эти ограничения. Это становится возможным путем настройки локальной службы WCF для создания HTTP-подключения к службе ретрансляции (вместо подключения TCP). Service Bus предоставляет параметр ConnectivityMode системного уровня, который может принимать одно из трех значений: Tcp, Http и AutoDetect (см. следующую таблицу). Чтобы обеспечить подключение служб через HTTP, задайте для этого свойства значение Http.

 

ConnectivityMode Описание

Tcp

Службы создают TCP-подключения к службе ретрансляции по порту 9351 (SSL).

Http

Службы создают HTTP-подключение к службе ретрансляции, что упрощает обход ограничений, связанных с TCP-портами.

AutoDetect (по умолчанию)

Этот режим служит для автоматического выбора между режимами Tcp и Http на основе механизма автоматического определения, который проверяет, доступна ли возможность подключения в текущей сетевой среде, и использует Tcp в качестве предпочитаемого варианта.

AutoDetect является режимом по умолчанию, что означает автоматическое определение привязками ретрансляции, следует ли использовать TCP или HTTP для подключения локальной службы к службе ретрансляции. Если в данной сетевой конфигурации доступно использование TCP, этот режим будет использоваться по умолчанию (то есть выполняется попытка использования TCP путем отправки сообщения проверки связи на URL-адрес определения подключения). Если TCP-подключение завершается со сбоем, происходит автоматическое переключение в режим HTTP. Поэтому в большинстве случаев нет необходимости задавать это свойство явным образом, так как поведение по умолчанию автоматического определения задает поведение для пользователя. Это свойство следует задавать явным образом только при необходимости принудительного использования TCP или HTTP.

Можно определить режим подключения на уровне AppDomain путем использования статического класса ServiceBusEnvironment. Он предоставляет свойство SystemConnectivity, в котором можно указать одно из трех значений ConnectivityMode, приведенных ранее в этом разделе. В следующем коде показано, как изменить приложение для использования режима подключения HTTP.

...
ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Http;
ServiceHost host = new ServiceHost(typeof(OnewayService), address);
host.Open();
...

Настройка системного режима подключения вступает в силу для всех привязок ретрансляции.

NetEventRelayBinding

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

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

Привязка NetEventRelayBinding поддерживает те же параметры SystemConnectivity, что и привязка NetEventRelayBinding. При настройке свойства SystemConnectivity для класса ServiceBusEnvironment, оно вступает в силу на всех конечных точках. Поэтому можно использовать «агрессивный» режим HTTP-подключения для всех локальных конечных точек NetEventRelayBinding, если они размещены в закрытой сетевой среде, которая блокирует исходящие TCP-подключения.

NetTcpRelayBinding

Привязка NetTcpRelayBinding поддерживает семантику двусторонних сообщений и очень похожа на стандартную привязку WCF NetTcpBinding. Основное отличие заключается в том, что NetTcpRelayBinding создает общедоступную конечную точку TCP в службе ретрансляции.

По умолчанию привязка NetTcpRelayBinding поддерживает SOAP 1.2 по протоколу TCP и использует эффективную двоичную сериализацию. Хотя ее конфигурация очень схожа с конфигурацией привязки NetTcpBinding, базовые слои сокета TCP отличаются, поэтому не являются напрямую совместимыми. Это означает, что интегрируемые клиентские приложения также должны быть настроены на использование NetTcpRelayBinding.

Сначала локальная служба WCF устанавливает безопасное исходящее TCP-подключение к службе ретрансляции. Во время этого процесса служба должна пройти проверку подлинности, задать адрес для прослушивания и определить тип прослушивателя, который должен быть создан на ретрансляторе. На этом этапе эта привязка очень схожа с привязкой NetOnewayRelayBinding. Если один из узлов переднего плана принимает входящее сообщение, сообщение управления маршрутизируется на службу WCF с указанием, как создать встречное подключение с клиентским узлом переднего плана. Так создается прямая пересылка «сокет — сокет» для ретрансляции TCP-сообщений.

Привязка NetTcpRelayBinding поддерживает два режима подключения (см. TcpRelayConnectionMode), которые управляют, как клиент и служба взаимодействуют друг с другом через службу ретрансляции (см. следующую таблицу).

 

TcpConnectionMode Описание

Relayed (по умолчанию)

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

Hybrid

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

Режим Relayed является режимом по умолчанию, тогда как режим Hybrid подразумевает установку службой ретрансляции прямого подключения между клиентским приложением и службой. Поэтому данные не передаются через ретранслятор. Режим называется "гибридным" потому, что сначала он ретранслирует данные, но при этом пытается перейти на прямое подключение. В случае успеха происходит переключение на прямое подключение без потери данных. Если установить прямое подключение невозможно, будет и дальше использоваться служба ретрансляции. Привязка NetTcpRelayBinding также поддерживает функциональную возможность SystemConnectivity при необходимости настройки локальной службы для подключения к службе ретрансляции через HTTP. При настройке свойства SystemConnectivity оно вступает в силу на всех конечных точках. Поэтому можно использовать «агрессивный» режим HTTP-подключения для всех локальных конечных точек NetTcpRelayBinding, если они размещены в закрытой сетевой среде, которая блокирует исходящие TCP-подключения.

Привязки ретрансляции HTTP

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

Service Bus содержит несколько привязок HTTP: WebHttpRelayBinding, BasicHttpRelayBinding и WS2007HttpRelayBinding. Эти привязки HTTP предоставляют большие возможности взаимодействия, так как могут поддерживать любого клиента, использующего стандартные протоколы, которые поддерживаются каждой из этих привязок. WebHttpRelayBinding и BasicHttpRelayBinding обеспечивают наибольший охват, так как основаны, соответственно, на HTTP/REST и базовом SOAP. Привязка WS2007HttpRelayBinding может обеспечить дополнительные уровни функционирования через протоколы WS-*. При использовании привязки WS2007HttpRelayBinding клиенты должны будут поддерживать тот же набор протоколов WS-*, который разрешен на конечной точке.

Независимо от используемой привязки ретрансляции HTTP в службе ретрансляции выполняются примерно одинаковые операции. Сначала локальная служба WCF устанавливает подключение по TCP или HTTP к службе ретрансляции в зависимости от используемого параметра ConnectivityMode. Функциональные возможности ConnectivityMode работают одинаково для всех привязок ретрансляции HTTP. Затем клиенты начинают отправлять сообщения на конечную точку HTTP, предоставляемую службой ретрансляции. Это означает, что клиенту больше не нужна WCF, подойдет любая библиотека, совместимая с HTTP/SOAP. Если один из узлов переднего плана принимает входящее сообщение, сообщение управления маршрутизируется в службу с указанием, как создать встречное подключение с клиентским узлом переднего плана. Так создается прямая пересылка «HTTP — сокет» для ретрансляции HTTP-сообщений.

Служба ретрансляции может «прозрачно» маршрутизировать сообщения SOAP 1.1, SOAP 1.2 и обычные сообщения HTTP (REST). Можно управлять стилем обмена сообщений и различными протоколами WS-*, которые следует использовать, путем настройки одной из привязок ретрансляции HTTP по примеру любой другой привязки WCF.

Была ли вам полезна эта информация?
(1500 символов осталось)
Спасибо за ваш отзыв

Добавления сообщества

ДОБАВИТЬ
Показ:
© 2014 Microsoft. Все права защищены.