2010-11-03 1 views
1

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

Client < ->basicHttpBinding (SOAP 1.1) < ->Router Service < ->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, но проблема, похоже, изолирована только от вызовов, исходящих от клиента C++ gSOAP. Я попытался использовать некоторые инструменты тестирования веб-сервисов (soapUI, soapSonar), чтобы увидеть, могу ли я воспроизвести проблему, но они, похоже, работают нормально. Любая помощь или руководство будут оценены.

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

+0

Какова полная информация о событии/стеке? Любое внутреннее исключение (исключения)? –

+0

Не было внутреннего исключения. Мы частично определили проблему, но я все еще не уверен, почему это происходит, за исключением того факта, что gSOAP явно не хорошо работает с netTCPBinding.Мы решили эту проблему, используя basicHttpBinding в цепочке вызовов. Не идеальна с точки зрения производительности, но, по крайней мере, у нас есть последовательная функциональность для всех клиентов службы. – stephenl

ответ

2

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

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

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

С уважением,

Стив

UPDATE (04/03/2011): Microsoft выпустили решение этой проблемы. http://connect.microsoft.com/VisualStudio/feedback/details/640260/wcf-routing-services-creates-wrong-message-when-protocol-bridging-is-used

0

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

Удача

+2

Возможно, вам будет интересно узнать, что Microsoft выпустила исправление для этой проблемы: [http://connect.microsoft.com/VisualStudio/feedback/details/640260/wcf-routing-services-creates-wrong-message-when -Протокол-перемычек является используемым] (http://connect.microsoft.com/VisualStudio/feedback/details/640260/wcf-routing-services-creates-wrong-message-when-protocol-bridging-is-used) , – stephenl

 Смежные вопросы

  • Нет связанных вопросов^_^