频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

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

来源: 作者: 出处:巧巧读书 2007-10-09 进入讨论组
上一页 1 2 3 4 5 下一页 

  用前几篇专栏文章(请参阅 参考资料看看关于 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]

  做了这些更改之后,ZSI 客户机输出 SOAP.py 服务器返回的 2002 年 2 月的日历就不会有问题了。看起来,您已经成功的完成了前面一半的分析。现在,我们要看一下在另外一个方向上如何进行通信

  对调一下:ZSI 服务器与 SOAP.py 客户机

  要测试用 ZSI 服务器作为服务器的 SOAP.py 客户机,您首先要做的事情就是编写 SOAP.py 客户机。还记得吗,我们曾使用 httplib 编写一个非常低级的客户机来测试 SOAP.py 服务器(请参阅 参考资料看看有关 ZSI 的第六篇专栏文章)。由于您想知道 SOAP.py 对 ZSI 的反应如何,这样做就不管用了。为了使用您的日历 Web 服务,可以编写一个速度较快的客户机,如 清单 2中所示。

  清单 2. 更新的 SOAP.py 客户机

#!/usr/bin/env python
import sys
#Import the SOAP.py machinery
from WebServices import SOAP
CAL_NS = "http://uche.ogbuji.net/eg/ws/simple-cal"
remote = SOAP.SOAPProxy(
  "localhost:8888",
  #namespace=CAL_NS,
  soapaction=""
)
print remote.getMonth(2002,2)

静态页面:http://www.qqread.com/xml-soap/c350669.html 更多文章 更多内容请看Python实用指南Wlan组网----家庭专题Python相关文章专题,或进入讨论组讨论。
上一页 1 2 3 4 5 下一页 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章