Поделиться через


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

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

Ниже даны ответы на вопросы: что такое надежный сеанс, как и когда его использовать, как его защитить.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Поддерживаемые типы каналов надежного сеанса (поддерживаемые значения TChannel в зависимости от типа базового канала) IRequestChannel IRequestSessionChannel IDuplexChannel IDuplexSessionChannel

IOutputSessionChannel

Да

Да

Да

Да

IRequestSessionChannel

Да

Да

Нет

Нет

IDuplexSessionChannel

Нет

Нет

Да

Да

Поддерживаемые типы каналов представляют собой значения, доступные для значения универсального параметра TChannel, передаваемого в метод BuildChannelFactory.

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

Поддерживаемые типы каналов надежного сеанса (поддерживаемые значения TChannel в зависимости от типа базового канала) IReplyChannel IReplySessionChannel IDuplexChannel IDuplexSessionChannel

IInputSessionChannel

Да

Да

Да

Да

IReplySessionChannel

Да

Да

Нет

Нет

IDuplexSessionChannel

Нет

Нет

Да

Да

Поддерживаемые типы каналов представляют собой значения, доступные для значения универсального параметра TChannel, передаваемого в метод BuildChannelListener.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • посредники прокси или транспортные мосты;

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

  • сеансы по HTTP.

См. также

Задачи

Надежный сеанс WS

Основные понятия

Использование привязок для настройки служб и клиентов