Создание маршрутизатора WCF - Сеансы с транспортами разных типов
ОГЛАВЛЕНИЕ
Сеансы с транспортами разных типов
В некоторых ситуациях может оказаться желательным, чтобы клиент отправлял сообщения маршрутизатору по протоколу HTTP, в то время как маршрутизатор перенаправляет эти сообщения службам приложений по протоколу TCP. Если активированы функции безопасности или надежных сеансов, для поддержки такой ситуации недостаточно даже конфигурации дуплексного маршрутизатора.
Как было упомянуто, адресация вручную поддерживается только каналами запрос-ответ. В противном случае модель службы опирается на функции адресации для коррелирования сообщений. Поскольку в TCP нет встроенной поддержки запроса-ответа, адресация вручную является возможным вариантом только в случае одностороннего контракта. Таким образом, канал отправки из рис. 7 должен создаваться из одностороннего контракта типа IDuplexRouterService. Канал обратного вызова предоставляется для получения ответа.
Канал обратного вызова маршрутизатора должен также сохранятся до отправки ответа, также должен сохраняться и клиентский канал обратного вызова. Для поддержки этой ситуации у клиента должен быть сеанс связи с маршрутизатором, а у маршрутизатора должен быть сеанс связи со службой.
В предположении, что службы приложений, вызываемые маршрутизатором, являются безопасными, для перенаправления неизмененных маршрутизатором сообщений вероятно понадобится адресация вручную. Если маршрутизатор вызывает службы приложений по протоколу TCP, для этого, как обсуждалось ранее, требуется реализация дуплексного маршрутизатора, чтобы исходящий вызов мог быть односторонним каналом. Это вынуждает клиента отправлять сообщения посредством привязки, осведомленной о сеансе, что подразумевает активирование безопасных сеансов или надежных сеансов по HTTP.
Если маршрутизатор является транзитным, вопрос сводится к предоставлению службе приложений возможности обрабатывать заголовки безопасности и заголовки надежных сеансов. Если маршрутизатору, чтобы поддерживать сеансы по HTTP, требуются безопасные или надежные сеансы для его клиентских конечных точек, маршрутизатор будет обрабатывать эти заголовки, и сеанс с службами приложений устанавливаться не будет.
Таким образом, протоколы разных типов работают только в ограниченном наборе случаев, если только в слое канала не осуществляется спуск на более низкий уровень для переопределения поведений по умолчанию. Если режим безопасности и надежные сеансы отключены, клиенты могут отправлять сообщения маршрутизатору по протоколу HTTP, в то время как маршрутизатор перенаправляет эти сообщения службам приложений по протоколу TCP. Если режим безопасности или надежные сеансы активированы, клиент должен отправлять сообщения маршрутизатору по протоколу TCP, не активируя надежные сеансы или безопасные сеансы для канала маршрутизатора.
Мишель Леру Бустамант (Michele Leroux Bustamante) – главный архитектор компании IDesign Inc., региональный директор Майкрософт в Сан-Диего и обладатель звания Microsoft MVP по Connected Systems. Ее последняя книга – Learning WCF («Изучаем WCF»).