<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    12.4.  SOAP 網絡服務查錯

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

                    SOAPProxy 的兩個小設置就可以打開查錯模式。

                    例 12.7.  SOAP 網絡服務查錯

                    >>> from SOAPpy import SOAPProxy
                    >>> url = 'http://services.xmethods.net:80/soap/servlet/rpcrouter'
                    >>> n = 'urn:xmethods-Temperature'
                    >>> server = SOAPProxy(url, namespace=n)     1
                    >>> server.config.dumpSOAPOut = 1            2
                    >>> server.config.dumpSOAPIn = 1
                    >>> temperature = server.getTemp('27502')    3
                    *** Outgoing SOAP ******************************************************
                    <?xml version="1.0" encoding="UTF-8"?>
                    <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
                      xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
                      xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
                      xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
                      xmlns:xsd="http://www.w3.org/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://schemas.xmlsoap.org/soap/envelope/"
                      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                      xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                    <SOAP-ENV:Body>
                    <ns1:getTempResponse xmlns:ns1="urn:xmethods-Temperature"
                      SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
                    <return xsi:type="xsd:float">80.0</return>
                    </ns1:getTempResponse>
                    
                    </SOAP-ENV:Body>
                    </SOAP-ENV:Envelope>
                    ************************************************************************
                    
                    >>> temperature
                    80.0
                    
                    1 首先,和平常一樣,建立帶有服務 URL 和命名空間的 SOAPProxy
                    2 然后,通過設置 server.config.dumpSOAPInserver.config.dumpSOAPOut 打開查錯模式。
                    3 最后,和平常一樣,調用遠程 SOAP 方法。SOAP 庫將會輸出送出的 XML 請求文檔和收到的 XML 返回文檔。這是 SOAPProxy 為你做的所有工作。有點恐怖,不是嗎?讓我們來分析一下。

                    大部分 XML 請求文檔都基于模板文件。忽略所有命名空間聲明這些對于所有 SOAP 調用都一成不變的東西。這個 “函數調用” 的核心是<Body> 當中的部分:

                    <ns1:getTemp                                 1
                      xmlns:ns1="urn:xmethods-Temperature"       2
                      SOAP-ENC:root="1">
                    <v1 xsi:type="xsd:string">27502</v1>         3
                    </ns1:getTemp>
                    
                    1 這個元素名 getTemp 就是函數名。SOAPProxy 使用 getattr 作為分發器。有別于使用方法名分別調用本地方法,這里使用方法名構造了一個 XML 請求文檔。
                    2 函數的 XML 元素被存儲于一個特別的命名空間,這個命名空間就是你在建立 SOAPProxy 對象時所指定的那個命名空間。也不必為 SOAP-ENC:root 而苦惱,因為它也是基于模板文件的。
                    3 函數的參數也被記入 XML 文檔。SOAPProxy 查看并確定每個參數的數據類型 (這里是 string 字符串類型)。參數的數據類型記入 xsi:type 屬性,并在其后記入實際的字符串值。

                    返回的 XML 文檔同樣容易理解,重點在于知道應該忽略掉哪些內容。把注意力集中在 <Body> 部分:

                    <ns1:getTempResponse                             1
                      xmlns:ns1="urn:xmethods-Temperature"           2
                      SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
                    <return xsi:type="xsd:float">80.0</return>       3
                    </ns1:getTempResponse>
                    
                    1 服務器傳回的值記錄在 <getTempResponse> 部分的幾行中。通常包括函數名和回應 (Response)。當然其他的內容也可能出現在這里,但 SOAPProxy 所重視的不是這里的元素名,而是命名空間。
                    2 服務器返回時所使用的命名空間就是在請求時所用的命名空間,也就是在創建 SOAPProxy 對象時所指定的命名空間。本章稍后的部分中,我們將看到在創建 SOAPProxy 對象時忘記指定功能名空間會怎樣。
                    3 這是返回值和它的數據類型 (浮點類型 float)。SOAPProxy 使用顯式數據類型創建一個本地數據類型的 Python 對象并返回之。

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频