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

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

 2008-09-30 13:00:25 来源:WEB开发网   
核心提示: ZSI 和名称空间在接下去的测试中,您要扩展 ZSI 客户机以便它能支持名称空间内的多个方法,Python Web 服务开发者 第 8 部分: Python SOAP 库,第 3 部分(4),要实现这一目的需要克服一些困难;但是 ZSI 包的作者 Rich Salz 说,很快就可以支持方法

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)

上一页  1 2 3 4 5  下一页

Tags:Python Web 服务

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