Служба маршрутизации WCF 4 - проблема с протоколом - PullRequest
1 голос
/ 03 ноября 2010

У меня есть следующий сценарий соединения по протоколу WCF: Клиент WCF, использующий привязку basicHttp, общается со службой маршрутизации, которая перенаправляет запрос в службу, используя netTcp.

Клиент <-> basicHttpBinding (SOAP 1.1) <-> Служба маршрутизатора <-> netTcpBinding (SOAP 1.2) <-> Служба

Функциональность маршрутизации работает отлично, пока мы не предоставляем службу нашему клиенту C ++, который использует библиотеку gSOAP для передачи сообщений службе. Если клиент C ++ взаимодействует с Сервисом напрямую, вызов завершается успешно; однако, как только он пытается связаться через Службу маршрутизации, он терпит неудачу.

Служба получает перенаправленное сообщение, но выдает исключение, как только она пытается десериализовать сообщение. Сообщение об ошибке, возвращаемое службой, - System.ServiceModel.Dispatcher.NetDispatcherFaultException, говорящее "The formatter threw an exception while trying to deserialize the message…"

Похоже, что проблема вызвана соединением протоколов. Если я не использую протоколирование мостов, то есть я использую basicHttp во всей цепочке вызовов, клиент C ++ (и маршрутизация сообщений) работает должным образом.

Я не могу понять, как решить эту проблему. Я понимаю, что служба маршрутизации предназначена для посредничества WCF-WCF, но проблема, по-видимому, изолирована только от вызовов, исходящих от клиента g ++ C ++. Я пытался использовать некоторые инструменты тестирования веб-сервисов (soapUI, soapSonar), чтобы посмотреть, смогу ли я воспроизвести проблему, но, похоже, они работают нормально. Мы будем благодарны за любую помощь или руководство.

С уважением, Стив

Ответы [ 2 ]

2 голосов
/ 17 февраля 2011

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

http://webservices20.blogspot.com/2011/01/gsoap-and-wcf-routing-services-are-not.html

Спасибо всем, кто помог прояснить этот вопрос!

С уважением,

Стив

ОБНОВЛЕНИЕ (03.04.2011): Microsoft выпустила исправление для этой проблемы.http://connect.microsoft.com/VisualStudio/feedback/details/640260/wcf-routing-services-creates-wrong-message-when-protocol-bridging-is-used

0 голосов
/ 03 марта 2011

Эта проблема также возникает при использовании любых сообщений SOAP с кодировкой RPC с различными входящими и исходящими привязками. Ссылка на пространство имен, связанная с определением типа, теряется при переводе. Мы создали расширение поведения службы, которое добавило ссылку на пространство имен вручную. Это не было идеальным, но мы не могли изменить привязки. Мы неофициально сообщили о проблеме в Microsoft.

Удачи

...