12.4.  SOAP 网络服务查错

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

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

例 12.7.  SOAP 网络服务查错

>>> from SOAPpy import SOAPProxy
>>> url = 'http://www.bhlaab.com/705: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/042/soap/encoding/"
  xmlns:SOAP-ENC="http://www.bhlaab.com/598/soap/encoding/"
  xmlns:xsi="http://www.bhlaab.com/714/1999/XMLSchema-instance"
  xmlns:SOAP-ENV="http://www.bhlaab.com/470/soap/envelope/"
  xmlns:xsd="http://www.bhlaab.com/186/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/060/soap/envelope/"
  xmlns:xsi="http://www.bhlaab.com/754/2001/XMLSchema-instance"
  xmlns:xsd="http://www.bhlaab.com/587/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:getTempResponse xmlns:ns1="urn:xmethods-Temperature"
  SOAP-ENV:encodingStyle="http://www.bhlaab.com/700/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/975/soap/encoding/">
<return xsi:type="xsd:float">80.0</return>       
</ns1:getTempResponse>
服务器传回的值记录在 <getTempResponse> 部分的几行中。通常包括函数名和回应 (Response)。当然其他的内容也可能出现在这里,但 SOAPProxy 所重视的不是这里的元素名,而是命名空间。
服务器返回时所使用的命名空间就是在请求时所用的命名空间,也就是在创建 SOAPProxy 对象时所指定的命名空间。本章稍后的部分中,我们将看到在创建 SOAPProxy 对象时忘记指定功能名空间会怎样。
这是返回值和它的数据类型 (浮点类型 float)。SOAPProxy 使用显式数据类型创建一个本地数据类型的 Python 对象并返回之。
时时彩软件咋骗 博悦注册 时时彩开奖公告 中国福彩中心官网 澳门时时彩开奖结果
时时彩稳赚计划软件 内蒙古时时彩玩法 吉林时时彩开奖号码 狐仙计划软件官网 功夫时时彩开奖视频
时时彩漏洞日赚千元 3d走势图乐彩网 今天时时彩开奖记录 凤凰时时彩平台注册 时时彩后二平刷软件
一诺365发票软件 时时彩网站搭建7xwl 江西时时彩每天计划 时时彩推广网站 天下汇时时彩平台制度
时时彩过年 急速赛车游戏机玩法 河北了快三 重庆快乐10分开奖直播现场 北京时时彩网站哪个好
十一选五乐选玩法 幸运飞艇开奖视频直播 贵州十一选五走势图 大战皇家赌场 北京时时彩开奖记录
云南时时彩走势 秒速赛车官方开奖 凤凰娱乐平台 时时彩万能后二 江苏11选5 走势图
江苏快3一定牛预测 重庆时时彩软件计划 北京pk10投注网平台 广东11选5开奖视频 云南快乐10分开将结果第63期