пятница, 16 сентября 2011 г.

gSoap and WCF service hosted in Windows Service

Использовал gSoap для вызовов методов WCF сервиса из unmanaged C++, работало если хостить в IIS ASP.NET. После того как захостил через ServiceHost в windows сервисе - работать перестало. Потратил кучу времени чтобы найти причину и решение.

Причина: сообщение не рутилось по HTTP заголовку SOAPAction, это можно видеть в SvcTraceViewer.exe, если тестировать сервис через WcfTestClient.exe, то все рутиться.

There are three ways to route a soap message to the correct operation:

1. Using the Http header SOAPAction (ASMX uses this one)
2. Using the addressing soap header (WCF uses this one by default)
3. Using the body element.

После долгой бестолковой возни с первыми двумя пунктами, решение пришло через третий пункт. У Microsoft есть сэмпл, как написать такой сервис. А вот еще правильная подсказка, от участника Jaap de Wolff.

Но и после всех этих приседаний мне еще пришлось наставить множественные атрибуты XmlSerializerFormat и перегенерить код gSoap клиента на использование SOAP 1.2.

На этом месте можно выдохнуть.

Комментариев нет:

Отправить комментарий