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

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

 2007-03-29 12:23:34 来源:WEB开发网   
核心提示: 这个客户机的实现与第五篇专栏文章中的 curses 客户机的类似,需要注意一点,Python Web 服务开发者 第 8 部分: Python SOAP 库(4), SOAPProxy 的 namespace(名称空间)参数被注释掉了,正如 ZSI 客户机的缺省实现无法知道名称空间一样,您

这个客户机的实现与第五篇专栏文章中的 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 方法的一个示例。

上一页  1 2 3 4 5 6  下一页

Tags:Python Web 服务

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