WEB开发网
开发学院软件开发Python Python Web 服务开发者 第 8 部分: Python SOAP 库... 阅读

Python Web 服务开发者 第 8 部分: Python SOAP 库,第 3 部分

 2008-09-30 13:00:25 来源:WEB开发网   
核心提示: 在另外一个窗口中,运行脚本 zsi-client.py : python zsi-client.py在客户机窗口中,Python Web 服务开发者 第 8 部分: Python SOAP 库,第 3 部分(2),您会得到一条出错消息,它的内容是:Traceback (most recen

在另外一个窗口中,运行脚本 zsi-client.py :

python zsi-client.py

在客户机窗口中,您会得到一条出错消息,它的内容是:

Traceback (most recent call last):
 File "zsi-client.py", line 21, in ?
  print b.Receive(TC.Any(aslist = b.aslist))
 File "/usr/local/lib/python2.1/site-packages/ZSI/client.py", line 227, in Receive
  raise TypeError, "Unexpected SOAP fault: " + msg.string
TypeError: Unexpected SOAP fault: No method getMonth found

用前几篇专栏文章(请参阅 参考资料看看关于 SOAP.py 的第五篇专栏文章)中所展示的技巧分析您得到的调试消息,您马上就明白这个问题了。所调用的方法的名称空间不正确。在 SOAP 体内引用方法时方法不带前缀,也没有定义缺省的名称空间。SOAP.py 服务器定义 getMonth 在 http://uche.ogbuji.net/eg/ws/simple-cal 名称空间中,因此您需要调整 ZSI 客户机,以使它能请求在正确的名称空间中的那个方法。

只在 ZSI Binding 对象上调用 getMonth 解决不了这个问题;您需要使用一些较低级别的接口以便在需要的地方添加关键参数。您需要指定所调用的方法的名称空间。要指定它的名称空间,您需要更改给方法起的名称(给名称添加前缀)并在 nsdict 参数中指定前缀到名称空间的映射。 清单 1展示了经过这些修改的 ZSI 客户机:

清单 1. 更新过的 ZSI 客户机

#zsi-client.py
import sys
#Import the ZSI client
from ZSI.client import Binding
from ZSI import TC
u = ''
n = 'http://uche.ogbuji.net/eg/ws/simple-cal'
b = Binding(url=u, ns=n, host='localhost', port=8888)
b.Send(None,
    "ns1:getMonth",
    (2002,2),
    requesttypecode=TC.Any('ns1:getMonth', aslist=b.aslist),
    nsdict={'ns1':n},
    )
res = b.Receive(TC.Any(aslist = b.aslist))
print res[0]

上一页  1 2 3 4 5  下一页

Tags:Python Web 服务

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接