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

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

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

  这个客户机的实现与第五篇专栏文章中的 curses 客户机的类似。需要注意一点, SOAPProxy 的 namespace(名称空间)参数被注释掉了。正如 ZSI 客户机的缺省实现无法知道名称空间一样,服务器的同样也无法知道。

  要运行样本脚本,请在一个窗口中再次启动 ZSI 服务器:

python zsi-server.py

  在另一个窗口中启动 SOAP.py 客户机:

python soappy-client.py

  如您所愿(因为这个客户机是为了与 ZSI 服务器通信而特地编写的),返回给您的正是 2002 年 2 月的日历。

  ZSI 和名称空间

  在接下去的测试中,您要扩展 ZSI 客户机以便它能支持名称空间内的多个方法。要实现这一目的需要克服一些困难;但是 ZSI 包的作者 Rich Salz 说,很快就可以支持方法的名称空间了。他说,我的设想是通过 Python 2.2 中的一个新功能,这个功能允许您任意给函数定义属性。如果您在函数定义上添加了 namespace 属性,那么 ZSI 指派代码就会查询这个属性以判定在哪个名称空间中定义了方法。为了将来引用,您可以通过将属性设置在函数对象上给函数添加任何属性。下面是一个很短的示例:

>>> def foo(a):
...  pass
...
>>> foo.namespace = "http://foo.com"
>>> print foo.namespace
http://foo.com
>>>

  Salz 还提到,他会添加对除名称空间信息以外的关于函数的其它属性(比如参数类型信息)的支持。这样 ZSI 就可以在函数被调用之前对传入的参数进行类型检查。

  不管在任何情况下,要知道 ZSI 服务器的名称空间,您需要给 getMonth 方法(以及其它任何我们希望放在名称空间中的方法)添加一点逻辑。对于当前的的调用,您可以先添加一个 ClientBinding 试试。它包含有关调用的所有相关信息,包括其名称空间在内。(缺省情况下,ZSI 将忽略名称空间。)然后,您可以将 ClientBinding 的名称空间同您所期望的名称空间进行比较。如果匹配,那么您可以返回正确的结果;反之,您可以抛出异常,异常内容为:方法未定义。 清单 3 展示重构的 getMonth 方法的一个示例。

  清单 3. 重构的 getMonth 方法

def getMonth(year, month):
 cb = dispatch.GetClientBinding()
 if cb.GetNS() != CAL_NS:
  raise TypeError, "Unimplemented method %s %s" % (cb.GetNS(),name)
 return calendar.month(year, month)

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