Python Web 服务开发者 第 6 部分: Python SOAP 库,第 2 部分
2007-03-29 12:12:35 来源:WEB开发网TypeCode 模块能够实现 Python 数据类型和 SOAP 数据类型之间既精确又可扩展的映射。它有一组用于 String 、 Integer 等等的内置类。它还定义了一个 Struct 类,用来定义任意的数据聚合,此外,还定义了特殊的类 Any ,它可以用来表示任何内置或导出类型,因而它也就成了动态类型化(dynamic typing)的基础。其中后两个类是解决 SOAP 编码中的许多互操作性问题的关键,这些问题源于类型化数据的不同的数据编入和数据编出。虽然要使 ZSI 能在我们正在处理的 Delphi 服务器中使用,我们就必须解决一些复杂的难题,但是,ZSI 至少提供了做到这一点所需的所有机制。对于其它 Python SOAP 实现,要解决互操作性问题,我们得修改客户机库代码。
接下来,我们创建 CurseRequest 类,它将被数据编入成 Captain Haddock 服务器所要求的形式。我们为所要求的 LangCode 参数定义一个实例属性。然后,把一段 ZSI 代码指定给该类,这段代码将 LangCode 值数据编入成字符串。要注意的一点是 inline=1 规范,它禁用了使用多引用(multi-reference)值进行数据编入。在缺省情况下,ZSI 使用多引用对结构进行数据编入,这意味着,为了避免值的重复,您可以在 SOAP 消息的一个部件中表达某个值,然后通过在该 SOAP 消息的另一个部件中进行引用来引用该同一个值。SOAP 编码多引用值不如简单值那么常用,所以,ZSI 的结构类型在缺省情况下被数据编入成多引用,就让人觉得有点奇怪了。
这一细节及其它一些东西似乎强化了 ZSI 的作者 Rich Salz 给我们的忠告:ZSI 实际上主要是为复杂的 Web 服务而设计的。他承诺会尽快使在玩具类服务上使用 ZSI 变得容易些,此类服务似乎占了已发布服务的大部分。
以下代码说明了示例客户机代码的用法:
更多精彩
赞助商链接