WCF与Python SUDS在继承时的XML差异?

15 投票
2 回答
1428 浏览
提问于 2025-04-15 19:43

我有一个关于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 个回答

0

你可以使用数据契约序列化器来控制 XML 是如何创建和读取的。具体可以参考这个链接:http://msdn.microsoft.com/en-us/library/ms731073.aspx

1

关于Python那边的情况我不太清楚,但在WCF这边有几个选择。最简单的方法是创建一个消息检查器,用来检测和转换Python生成的SOAP消息,让它更适合WCF服务。

另一个更复杂但更“纯粹”的方法是调整WCF服务生成的WSDL,让Python客户端能够生成之前提到的适合的SOAP消息。一旦你找到需要的调整方法,就可以用MessageContract类来替代DataContract,这样服务就会生成调整过的WSDL。使用.NET的客户端应该能顺利处理这个调整过的WSDL。

撰写回答