Различия в XML между WCF и Python SUDS для наследования? - PullRequest
15 голосов
/ 25 февраля 2010

У меня есть вопрос, касающийся различных способов представления наследования между WCF и SUDS (Python). У меня есть C ++ / CLI WCF-сервер (.NET 3.5 SP1), и я пытаюсь с ним связаться. Я использовал клиент C # (также WCF), и он отлично работает, но есть проблемы при использовании клиента SUDS (Python 2.6.4, SUDS 0.3.8). Это в основном хорошо, но для унаследованных типов, и разница, похоже, заключается в том, как они представляют наследование в SOAP XML. Когда я просматриваю сообщения, которые регистрирует сервер, я получаю результаты, подобные следующим:

C # Клиент:

<ns:DerivedType>
...
</ns:DerivedType>

Клиент Python:

<ns:BaseType xsi:type="ns:DerivedType">
...
</ns:BaseType>

Можно ли изменить сервер WCF, чтобы он принимал стиль Python? Или изменить клиент Python SUDS для отправки стиля WCF? Какой из них правильный?

Ответы [ 2 ]

1 голос
/ 28 июля 2011

Не знаю насчет Python, но есть несколько вариантов на стороне WCF. Более прямой вариант - создать инспектор сообщений для обнаружения и преобразования сгенерированного на python мыла в нечто более приемлемое для службы WCF.

Более сложный, но "более чистый" вариант - определить, как формировать WSDL, сгенерированный службой WCF, чтобы он позволял клиенту python создавать вышеупомянутое приемлемое мыло. Как только вы найдете требуемые настройки, вы будете использовать классы MessageContract вместо DataContract, чтобы служба генерировала настроенный WSDL. Клиенты .NET должны обрабатывать этот измененный WSDL без жалоб.

0 голосов
/ 14 мая 2011

Вы можете использовать сериализатор контрактов данных, чтобы контролировать, как создается и читается XML. Смотри: http://msdn.microsoft.com/en-us/library/ms731073.aspx

...