Различия XML между WCF и Python SUDS для наследования?
У меня есть вопрос относительно различных способов наследования, представленных между WCF и SUDS (Python). У меня есть WCF-сервер С++/CLI (.NET 3.5 SP1), и я пытаюсь установить с ним связь. Я использовал клиент С# (WCF), и он работает нормально, но есть проблемы при использовании клиента SUDS (Python 2.6.4, SUDS 0.3.8). Он в основном прекрасен, но для унаследованных типов, и разница, кажется, в том, что два представляют наследование в SOAP XML. Когда я просматриваю сообщения, которые регистрирует сервер, я получаю результаты, похожие на следующие:
Клиент С#:
<ns:DerivedType>
...
</ns:DerivedType>
Клиент Python:
<ns:BaseType xsi:type="ns:DerivedType">
...
</ns:BaseType>
Можно ли изменить WCF-сервер, чтобы принять стиль Python? Или изменить клиент Python SUDS для отправки стиля WCF? Какой из них правильный?
Ответы
Ответ 1
Не знаю о стороне python, но есть пара опций на стороне WCF. Более прямой вариант состоит в том, чтобы создать инспектор сообщений, чтобы обнаружить и преобразовать мыло, сгенерированное python, в нечто более приемлемое для службы WCF.
Более сложная, но более чистая опция - определить, как формировать WSDL, сгенерированный службой WCF, чтобы он позволял клиенту python создавать вышеупомянутое приятное мыло. После того, как вы найдете требуемые настройки, вы должны использовать классы MessageContract вместо DataContract, чтобы заставить службу создавать измененный WSDL. Клиенты .NET должны обрабатывать этот измененный WSDL без жалоб.
Ответ 2
Вы можете использовать сериализатор данных для управления процессом создания и чтения xml. См.: http://msdn.microsoft.com/en-us/library/ms731073.aspx