Общие сведения о надежных сеансах

Надежная передача сообщений в Windows Communication Foundation (WCF) SOAP обеспечивает сквозную надежность передачи сообщений между конечными точками SOAP. Такой обмен реализуется в сетях, которые ненадежны из-за исправления ошибок транспорта и ошибок на уровне сообщений SOAP. В частности, эта технология обеспечивает основанную на сеансах, одиночную, упорядоченную (необязательно) доставку сообщений, отправленных по протоколу SOAP или через транспортных посредников. Доставка на основе сеанса обеспечивает группирование сообщений в сеансе с необязательным порядком сообщений.

В этом разделе описаны надежные сеансы, способы их использования и способы их защиты.

Надежные сеансы WCF

Надежные сеансы WCF — это реализация надежного обмена сообщениями SOAP, как определено протоколом WS-ReliableMessaging.

Надежный обмен сообщениями WCF SOAP предоставляет сквозной надежный сеанс между двумя конечными точками независимо от количества или типа посредников, разделяющих конечные точки обмена сообщениями. К ним относятся все посредники транспорта, которые не используют SOAP (например, прокси-серверы HTTP) или посредники, использующие SOAP (например, маршрутизаторы или мосты на основе SOAP), необходимые для передачи сообщений между конечными точками. Надежный канал сеансов поддерживает интерактивное взаимодействие, чтобы службы, подключенные к такому каналу, выполнялись одновременно и обмен и обрабатывают сообщения в условиях низкой задержки, то есть в течение относительно коротких интервалов времени. Это объединение означает, что эти компоненты вместе или завершаются сбоем, поэтому между ними не предусмотрена изоляция.

Надежный сеанс скрывает два вида сбоев.

  • Сбои на уровне сообщений SOAP, которые включают в себя потерянные или дублированные сообщения и сообщения, приходящие в порядке, отличном от порядка, в котором они были отправлены.

  • Сбои транспорта.

Надежный сеанс реализует протокол WS-ReliableMessaging и окно передачи в памяти, чтобы маскировать сбои на уровне сообщений SOAP, и восстанавливает подключения в случае сбоев транспорта.

Надежный сеанс обеспечивает для сообщений SOAP то, что обеспечивает TCP для IP-пакетов. Подключение через сокет TCP - это единая, упорядоченная передача IP-пакетов между узлами. Надежный канал обеспечивает тот же тип надежной передачи, но отличается от надежности сокета TCP в следующем.

  • Надежность поддерживается на уровне сообщений SOAP, она не связана с пакетом байтов произвольного размера.

  • Надежность нейтраличена транспортом, а не только для передачи по TCP.

  • Надежность не привязана к определенному сеансу транспорта (например, к сеансу, который предоставляет TCP-подключение) и может использовать несколько сеансов транспорта одновременно или последовательно в течение всего времени существования надежного сеанса.

  • Надежный сеанс осуществляется между конечными точками отправителя и получателя SOAP независимо от числа транспортных подключений, необходимых для их соединения. Короче говоря, надежность TCP заканчивается, когда заканчивается транспортное подключение, а надежный сеанс обеспечивает сквозную надежность.

Надежные сеансы и привязки

Как упоминание ранее, надежный сеанс является нейтральным для транспорта. Кроме того, можно установить надежный сеанс для многих шаблонов обмена сообщениями, таких как запрос-ответ или дуплекс. Надежный сеанс WCF предоставляется как свойство набора привязок.

Используйте надежный сеанс для конечных точек, которые используют:

  • стандартные привязки транспорта на основе HTTP

    • WsHttpBinding и предоставление контрактов типа запрос-ответ или односторонних контрактов.

    • При использовании надежного сеанса по запросу или простому односторонному контракту службы.

    • WsDualHttpBinding и предоставление дуплексных, односторонних контрактов или контрактов типа запрос-ответ.

    • WsFederationHttpBinding и предоставление контрактов типа запрос-ответ или односторонних контрактов.

  • стандартные привязки транспорта на основе TCP

    • NetTcpBinding и предоставление дуплексных, односторонних контрактов или контрактов типа запрос-ответ.

Используйте надежный сеанс для любых других привязок, создав пользовательскую привязку, например HTTPS (дополнительные сведения о проблемах, см. в разделе "Надежные сеансы и безопасность") или именованной привязки канала.

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

Поддерживаемые типы каналов надежных сеансов† IRequestChannel IRequestSessionChannel IDuplexChannel IDuplexSessionChannel
IOutputSessionChannel Да Да Да Да
IRequestSessionChannel Да Да No No
IDuplexSessionChannel No No Да Да

† Поддерживаемые типы каналов — это значения, доступные для значения универсального TChannel параметра, передаваемого в BuildChannelFactory<TChannel>(BindingContext) метод.

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

Поддерживаемые типы каналов надежных сеансов. IReplyChannel IReplySessionChannel IDuplexChannel IDuplexSessionChannel
IInputSessionChannel Да Да Да Да
IReplySessionChannel Да Да No No
IDuplexSessionChannel No No Да Да

•Поддерживаемые типы каналов — это значения, доступные для универсального TChannel значения параметра, передаваемого в BuildChannelListener<TChannel>(BindingContext) метод.

Надежные сеансы и безопасность

Защита надежного сеанса важна, чтобы убедиться, что стороны связи (служба и клиент) проходят проверку подлинности, и что сообщения, обменяемые в сеансе, не будут изменены. Кроме того, важно обеспечить целостность каждого отдельного надежного сеанса. Надежный сеанс защищается путем привязки его к контексту безопасности, который представлен и управляется каналом сеансов безопасности. Канал безопасности обеспечивает сеанс безопасности. Маркеры безопасности, обмен которыми осуществляется во время установления сеанса, затем используются для защиты сообщений в надежном сеансе.

Когда надежный сеанс выполняется через TCP-S, сеанс TCP привязан к надежному сеансу. Поэтому безопасность транспорта гарантирует, что безопасность также привязана к надежному сеансу. В этом случае восстановление подключения выключено.

Единственное исключение относится к использованию HTTPS. Сеанс SSL не привязан к надежному сеансу. Это налагает угрозу, так как сеансы, которые совместно используют контекст безопасности (сеанс SSL), не защищены друг от друга; это может быть или не может быть реальной угрозой в зависимости от приложения.

Использование надежных сеансов

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

Определенные системой привязки, которые поддерживают и разрешают надежный сеанс, включают в себя:

Предоставленные системой привязки, поддерживающие надежный сеанс в качестве параметра, но не включают один по умолчанию:

Пример создания пользовательской привязки см. в статье "Практическое руководство. Создание пользовательской привязки надежного сеанса с помощью HTTPS".

Обсуждение привязок WCF, поддерживающих надежные сеансы, см. в разделе "Предоставленные системой привязки".

Когда следует использовать надежные сеансы

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

Если для сценария требуется две конечные точки, подключенные по протоколу TCP, может быть достаточно tcp, чтобы обеспечить надежный обмен сообщениями. Хотя использовать надежный сеанс не нужно, так как TCP гарантирует, что пакеты прибывают в порядке и только один раз.

Если в вашем сценарии есть какие-либо из следующих характеристик, необходимо серьезно рассмотреть возможность использования надежного сеанса.

  • Посредники SOAP, такие как маршрутизаторы SOAP

  • Посредники прокси-сервера или транспортные мосты

  • Неустойчивое подключение

  • Сеансы по протоколу HTTP

См. также