Python适合编写标准、兼容和完整的SOAP web服务吗?
我用过几个Python的SOAP库(SOAPpy、soaplib和Twisted对SOAPpy的封装)来写我的SOAP网络服务。
当我使用Python客户端(SOAPpy.SOAPProxy和SUDS)时,能够顺利地和我的网络服务进行通信(可以返回简单和复杂类型的对象)。
但是,当我尝试用C#的ASP.net时,就遇到了很多问题。我在处理返回简单类型(比如int、string、double、boolean)时,做了一些小改动让SOAPpy库能工作。但我仍然在处理从SOAPpy返回复杂类型时遇到困难。
我找不到任何完整且兼容的Python库来写我的网络服务。
主要问题:如果有关于如何从Python网络服务返回与dot net兼容的复杂类型的建议或示例,我将非常感激。
注意:为了让SOAPpy能正常工作,我做了不少修改。而且,在使用SOAPpy时,我还得手动编写wsdl文件。
1 个回答
1
我个人觉得,Python的SOAP库和其他平台的兼容性不是很好。
我认为这里有两个问题:
- 首先,网络服务之间的兼容性更多的是一种理想,而不是现实。比如,可以看看这个问题,了解一下Java和WCF之间如何使用网络服务。
- 另外,WSDL这个概念主要是在编译时进行类型定义,这和Python最初的设计理念不太一致,所以在这方面的投入比较少。
我已经有一年多没接触网络服务了,所以可能情况有所变化。但建议还是和之前的问题一样:
- 如果你使用不止一种语言或库,建议先从WSDL开始写。
- 正如之前提到的,“先从XSD开始,但要限制在主流类型内。基本类型、由基本类型组成的复杂类型、相同类型的数组。”
- 最后,我选择使用
suds
来做Python的网络客户端,经过尝试soappy
和zsi
后得出的结论。在此之前,我还使用过一个基于C的库(gsoap),并从Python中链接到它。 - 我从来对Python的服务器实现不太满意,所以我通常会搭建Python服务器,然后用其他可以导出SOAP服务的库连接到它们(在我这里是Java或C,你可能会用C#)。这种连接通常是一个更简单的协议。
- 不过,如果你从WSDL开始,使用
soaplib
或者zsi
可能会有不错的结果。但我担心你几乎无法避免慢慢构建你的类型,同时检查兼容性。