Python Web 服务开发者 第 6 部分: Python SOAP 库,第 2 部分
2007-03-29 12:12:35 来源:WEB开发网核心提示: 您正在接受服务吗?建立一个 ZSI 服务器相当简单, 清单 3提供了一种非常简单的日历 SOAP 服务器,Python Web 服务开发者 第 6 部分: Python SOAP 库,第 2 部分(6),这个日历 SOAP 服务器与我们在上一期专栏中作为 SOAP.py 的示例而使用的相同
您正在接受服务吗?
建立一个 ZSI 服务器相当简单。 清单 3提供了一种非常简单的日历 SOAP 服务器,这个日历 SOAP 服务器与我们在上一期专栏中作为 SOAP.py 的示例而使用的相同。(请参阅 参考资料。)
清单 3:ZSI 日历 SOAP 服务器
#!/usr/bin/env python
import sys, calendar
#Import the ZSI machinery
from ZSI import dispatch
def getMonth(year, month):
return calendar.month(year, month)
def getYear(year):
return calendar.calendar(year)
print "Starting server..."
dispatch.AsServer(port=8080)
请注意,它比用 SOAP.py 实现还要容易。您所做的就是为每个方法定义一个函数。有了所需的参数,变量数和关键字参数还可以作为位置参数和名称参数使用。 dispatch.AsServer() 调用只是把所有已定义的函数注册成 SOAP 方法,并在指定端口启动 HTTP 服务器。
有一个问题是,ZSI 的服务器代码似乎不能轻易地纠正请求中所用的名称空间。其文档声称有一个 dispatch.GetNS() 函数,它返回请求元素中所用的名称空间,但事实好像并非如此。这是一个极其严重的缺失,因为在请求中所用的名称空间是请求中的基本部件。
以下 ZSI 客户机代码用来练习我们刚才编写的日历:
清单 4:ZSI 日历 SOAP 客户机
#http://xmethods.net/detail.html?id=175
import sys
#Import the ZSI client
from ZSI.client import Binding
u = ''
n = 'http://uche.ogbuji.net/eg/ws/simple-cal'
b = Binding(url=u, ns=n, host='localhost', port=8080)
result = b.getMonth(2002, 2)
print result[0]
result = b.getYear(2002)
print result[0]
更多精彩
赞助商链接