7

有谁知道一个好的 SUDS 教程。我正在尝试对 WSDL 文件运行测试,但无法找到有关如何执行此操作的任何信息。SUDS 与 SOAPy 有很大不同吗?有人会推荐它对存储在 WSDL 文件中的函数运行冒烟测试吗?

我读过 Python 2.6+ 不再支持 SOAPAy。这是真的?

我输入了一个 WSDL 文件:

from suds.client import Client

client = Client('http://10.51.54.50/ptz.wsdl')

client.service.GetNode()

我收到了这个错误:

    in open
    response = self._open(req, data)
  File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 407, in _open
    '_open', req)
  File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 367, in  _call_chain
    result = func(*args)
  File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 1146, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 1121, in do_open
    raise URLError(err)
urllib2.URLError: <urlopen error [Errno 111] Connection refused>

有谁知道为什么会这样?

我可以通过我的浏览器连接到这个文件。我已经安装了所有的 suds 包。是否需要任何其他设置?

4

3 回答 3

17

Suds 使用起来非常简单。

from suds.client import Client

client = Client("http://example.com/foo.wsdl")
client.service.someMethod(someParameter)

someMethod是 WSDL 中描述的方法的名称。

于 2010-01-14T11:36:40.353 回答
2

连接被拒绝表示服务器不存在。您可以在浏览器中或通过 curl访问http://10.51.54.50/ptz.wsdl吗?如果没有,首先让 SOAP 服务运行,然后重试。

于 2010-01-14T12:01:59.740 回答
2

就我而言,这是一个愚蠢的错误(就像任何其他错误一样)。

我用来初始化服务的 URL 类似于

Uri httpUri = new Uri("http://localhost:8000/CalculatorService");

我可以从与该服务在同一台机器上运行的 python 客户端访问该服务。我可以从本地和远程机器上的浏览器浏览 wsdl。但是,当我尝试从远程计算机访问此服务时,出现连接被拒绝错误。奇怪的是,在wireshark 中,我可以看到服务将wsdl 发送回远程客户端。浪费了几个小时后,我启用了日志记录

logging.getLogger('suds.client').setLevel(logging.DEBUG)
logging.getLogger('suds.transport').setLevel(logging.DEBUG)
logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG)
logging.getLogger('suds.wsdl').setLevel(logging.DEBUG)

日志显示 suds 从服务器下载了 wsdl,但之后它尝试连接到 localhost:8000。这解释了连接拒绝错误。我刚刚将 WCF 服务器上的 URI 更改为

Uri httpUri = new Uri("http://192.168.0.1:8000/CalculatorService");

这解决了我的问题

于 2013-11-20T10:40:23.647 回答