36

我有一个描述 Java 产品上的通信服务器客户端的 wsdl 文件。我正在实现一个基于 Python 的新服务器,它将实现相同的服务。

您是否知道基于 wsdl 创建 Python 服务器代码的任何方法,不需要我编写所有涉及的复杂类型?

另外,你推荐什么Api?

4

2 回答 2

26

这个问题没有得到足够的重视。

当前接受的答案很好,但它的答案是“不”。真的没有合理维护和通用的解决方案吗?

不幸的是,我不认为否定答案是由于对问题缺乏关注。python 中确实不支持 WSDL。如果您想避免从头开始构建自己的肥皂信封的复杂性,我唯一可以建议您的是使用许多肥皂网络服务工具(例如soapui)构建一个示例信封,然后将其用作模板字符串(我知道,可怕)在你的 python 代码中

更新你可以使用spyne。它是一个 python RPC 工具包,在其他协议中支持 SOAP。它将为您创建 WSDL,但如果您的目标是实现您已经拥有的 WSDL 描述的服务,那么您将不得不微调您的 spyne 服务(用 python 编写),直到生成的 WSDL 与原始的匹配

于 2013-04-11T18:04:54.490 回答
20

当谈到 SOAP 支持时,不幸的是 Python 不再是“包括电池”。客户端的支持是可以接受的,但在服务器端你基本上是靠你自己的。

对于初学者,您可能希望查看以下内容:

http://wiki.python.org/moin/WebServices

http://pywebsvcs.sourceforge.net/

http://doughellmann.com/2009/09/01/evaluate-tools-for-developing-with-soap-in-python.html

如果你真的想走这条路,ZSI似乎是可以使用的工具,尽管我怀疑它是否可以与最新的 2.x Python 发行版一起使用。

使用 Python 2.6.6,我尝试使用 ZSI 2.0 从 WSDL 开始构建 Web 服务。wsdl2py使用and生成代码时收到一些“模块已被弃用”警告wsdl2dispatch,必须单独安装PyXML并破解我的sys.path问题,以使其首先解析,否则我得到“模块 ext.reader 不存在”,然后最终得到一个令人失望的“ZSI:EvaluateException Got None for nillable(False), minOccurs(1) element”在基本的“Hello world!”上出现错误。具有必需元素的 WS。

切换到 ZSI 2.1_a1,它不再需要 PyXML 并wsdl2py完成所有工作(wsdl2dispatch2.0 所做的),但仍以“ZSI:EvaluateException Got None for nillable(False), minOccurs(1) element”错误告终。

体验不是很有趣,但足以让我对 Python 必须为 SOAP Web 服务提供什么形成意见……这并不多(这只是针对基本的 Web 服务,没有什么像WS-*规格)。YMMV!

编辑:我最近遇到了这个 SO question,虽然它是面向客户端解决方案的,但它也提到了一些用于构建 SOAP 服务的库。

于 2012-12-29T12:31:05.390 回答