12.4.  SOAP 网络服务查错

SOAP 提供了一个很方便的方法用以查看背后的情形。

SOAPProxy 的两个小设置就可以打开查错模式。

例 12.7.  SOAP 网络服务查错

>>> from SOAPpy import SOAPProxy
>>> url = 'http://www.bhlaab.com/849:80/soap/servlet/rpcrouter'
>>> n = 'urn:xmethods-Temperature'
>>> server = SOAPProxy(url, namespace=n)     
>>> server.config.dumpSOAPOut = 1            
>>> server.config.dumpSOAPIn = 1
>>> temperature = server.getTemp('27502')    
*** Outgoing SOAP ******************************************************
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://www.bhlaab.com/775/soap/encoding/"
  xmlns:SOAP-ENC="http://www.bhlaab.com/864/soap/encoding/"
  xmlns:xsi="http://www.bhlaab.com/919/1999/XMLSchema-instance"
  xmlns:SOAP-ENV="http://www.bhlaab.com/280/soap/envelope/"
  xmlns:xsd="http://www.bhlaab.com/937/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:getTemp xmlns:ns1="urn:xmethods-Temperature" SOAP-ENC:root="1">
<v1 xsi:type="xsd:string">27502</v1>
</ns1:getTemp>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
************************************************************************
*** Incoming SOAP ******************************************************
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.bhlaab.com/625/soap/envelope/"
  xmlns:xsi="http://www.bhlaab.com/590/2001/XMLSchema-instance"
  xmlns:xsd="http://www.bhlaab.com/982/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:getTempResponse xmlns:ns1="urn:xmethods-Temperature"
  SOAP-ENV:encodingStyle="http://www.bhlaab.com/150/soap/encoding/">
<return xsi:type="xsd:float">80.0</return>
</ns1:getTempResponse>

</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
************************************************************************

>>> temperature
80.0
首先,时时彩计划软件公式:和平常一样,建立带有服务 URL 和命名空间的 SOAPProxy
然后,通过设置 server.config.dumpSOAPInserver.config.dumpSOAPOut 打开查错模式。
最后,和平常一样,调用远程 SOAP 方法。SOAP 库将会输出送出的 XML 请求文档和收到的 XML 返回文档。这是 SOAPProxy 为你做的所有工作。有点恐怖,不是吗?让我们来分析一下。

大部分 XML 请求文档都基于模板文件。忽略所有命名空间声明这些对于所有 SOAP 调用都一成不变的东西。这个 “函数调用” 的核心是<Body> 当中的部分:

<ns1:getTemp                                 
  xmlns:ns1="urn:xmethods-Temperature"       
  SOAP-ENC:root="1">
<v1 xsi:type="xsd:string">27502</v1>         
</ns1:getTemp>
这个元素名 getTemp 就是函数名。SOAPProxy 使用 getattr 作为分发器。有别于使用方法名分别调用本地方法,这里使用方法名构造了一个 XML 请求文档。
函数的 XML 元素被存储于一个特别的命名空间,这个命名空间就是你在建立 SOAPProxy 对象时所指定的那个命名空间。也不必为 SOAP-ENC:root 而苦恼,因为它也是基于模板文件的。
函数的参数也被记入 XML 文档。SOAPProxy 查看并确定每个参数的数据类型 (这里是 string 字符串类型)。参数的数据类型记入 xsi:type 属性,并在其后记入实际的字符串值。

返回的 XML 文档同样容易理解,重点在于知道应该忽略掉哪些内容。把注意力集中在 <Body> 部分:

<ns1:getTempResponse                             
  xmlns:ns1="urn:xmethods-Temperature"           
  SOAP-ENV:encodingStyle="http://www.bhlaab.com/907/soap/encoding/">
<return xsi:type="xsd:float">80.0</return>       
</ns1:getTempResponse>
服务器传回的值记录在 <getTempResponse> 部分的几行中。通常包括函数名和回应 (Response)。当然其他的内容也可能出现在这里,但 SOAPProxy 所重视的不是这里的元素名,而是命名空间。
服务器返回时所使用的命名空间就是在请求时所用的命名空间,也就是在创建 SOAPProxy 对象时所指定的命名空间。本章稍后的部分中,我们将看到在创建 SOAPProxy 对象时忘记指定功能名空间会怎样。
这是返回值和它的数据类型 (浮点类型 float)。SOAPProxy 使用显式数据类型创建一个本地数据类型的 Python 对象并返回之。
时时彩冷热软件 时时彩4星缩水怎么玩 云南时时彩开奖时间 吉林时时彩规则介绍 东森游戏平台注册
世爵时时彩平台 fd能修改时时彩吗 一号庄娱乐平台跑路 内蒙古时时彩五星 皇冠时时彩网址登录
内蒙古时时彩玩法介绍 平刷王时时彩官网 老字号时时彩平台 如何攻击时时彩平台 新时时彩玩法走势
时时彩分析软件手机版 最可靠的时时彩平台 重庆时时彩计划qq群号 时时彩平台哪家好 时时彩公式软件修改