Python适合编写标准、兼容和完整的SOAP web服务吗?

1 投票
1 回答
912 浏览
提问于 2025-04-16 02:00

我用过几个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的网络客户端,经过尝试soappyzsi后得出的结论。在此之前,我还使用过一个基于C的库(gsoap),并从Python中链接到它。
  • 我从来对Python的服务器实现不太满意,所以我通常会搭建Python服务器,然后用其他可以导出SOAP服务的库连接到它们(在我这里是Java或C,你可能会用C#)。这种连接通常是一个更简单的协议。
  • 不过,如果你从WSDL开始,使用soaplib或者zsi可能会有不错的结果。但我担心你几乎无法避免慢慢构建你的类型,同时检查兼容性。

撰写回答