<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 12.6.?以 WSDL 進行 SOAP 內省 就像網絡服務舞臺上的所有事物,WSDL 也經歷了一個充滿明爭暗斗而且漫長多變的歷史。我不打算講述這段令我傷心的歷史。還有一些其他的標準提供相同的支持,但 WSDL 還是勝出,所以我們還是來學習一下如何使用它。 WSDL 最基本的功能便是讓你揭示 SOAP 服務器所提供的有效方法。 ## 例?12.8.?揭示有效方法 ``` >>> from SOAPpy import WSDL >>> wsdlFile = 'http://www.xmethods.net/sd/2001/TemperatureService.wsdl' >>> server = WSDL.Proxy(wsdlFile) >>> server.methods.keys() [u'getTemp'] ``` | | | | --- | --- | | \[1\] | SOAPpy 包含一個 WSDL 解析器。在本書寫作之時,它被標示為開發的初級階段,但我從來沒有在解析任何 WSDL 文件時遇到問題。 | | \[2\] | 使用一個 WSDL 文件,你還是要用到一個 proxy 類:`WSDL.Proxy`,它只需一個參數:WSDL 文件。我指定的是存儲在遠程服務器上的 WSDL 的 URL,但是這個 proxy 類對于本地的 WSDL 副本工作同樣出色。創建 WSDL proxy 將會下載 WSDL 文件并解析它,所以如果 WSDL 文件有任何問題 (或者由于網絡問題不能獲得) 你會立刻知道。 | | \[3\] | WSDL proxy 類通過 Python 字典 `server.methods` 揭示有效函數。所以列出有效方法只需調用字典方法 `keys()`。 | 好的,你知道這個 SOAP 服務器提供一個方法:`getTemp`。但是如何去調用它呢?WSDL 也在這方面提供信息。 ## 例?12.9.?揭示一個方法的參數 ``` >>> callInfo = server.methods['getTemp'] >>> callInfo.inparams [<SOAPpy.wstools.WSDLTools.ParameterInfo instance at 0x00CF3AD0>] >>> callInfo.inparams[0].name u'zipcode' >>> callInfo.inparams[0].type (u'http://www.w3.org/2001/XMLSchema', u'string') ``` | | | | --- | --- | | \[1\] | `server.methods` 字典中記錄一個 SOAPpy 的特別結構,被稱為 `CallInfo`。`CallInfo` 對象中包含著特定函數和函數參數的信息。 | | \[2\] | 函數參數信息存儲在 `callInfo.inparams` 中,這是一個記錄每一個參數信息的 `ParameterInfo` 對象的 Python 列表。 | | \[3\] | 每個 `ParameterInfo` 對象包含一個 `name` 屬性,這便是參數名。在通過 SOAP 調用函數時,你不需要知道參數名,但 SOAP 支持在調用函數時使用參數名 (類似于 Python)。如果使用參數名,`WSDL.Proxy` 將會正確地把這些參數關聯到遠程函數。 | | \[4\] | 每個參數都是都是顯式類型的,使用的是在 XML Schema 定義的數據類型。你可以在上一節中發現這一點:XML Schema 命名空間是我讓你忽略的模版的一部分。就目前而言,你還是可以繼續忽略它。`zipcode` 參數是一個字符串,如果你向 `WSDL.Proxy` 對象傳遞一個 Python 字符串,它會被正確地關聯和傳遞到服務器。 | WSDL 還允許你自省函數的返回值。 ## 例?12.10.?揭示方法返回值 ``` >>> callInfo.outparams [<SOAPpy.wstools.WSDLTools.ParameterInfo instance at 0x00CF3AF8>] >>> callInfo.outparams[0].name u'return' >>> callInfo.outparams[0].type (u'http://www.w3.org/2001/XMLSchema', u'float') ``` | | | | --- | --- | | \[1\] | 與揭示函數參數的 `callInfo.inparams` 對應的是揭示返回值的 `callInfo.outparams`。它也同樣是一個列表,因為通過 SOAP 調用函數時可以返回多個值,就像 Python 函數一樣。 | | \[2\] | `ParameterInfo` 對象包含 `name` 和 `type`。這個函數返回一個浮點值,它的名字是 `return`。 | 讓我們整合一下,通過 WSDL proxy 調用一個 SOAP 網絡服務。 ## 例?12.11.?通過 WSDL proxy 調用一個 SOAP 網絡服務 ``` >>> from SOAPpy import WSDL >>> wsdlFile = 'http://www.xmethods.net/sd/2001/TemperatureService.wsdl') >>> server = WSDL.Proxy(wsdlFile) >>> server.getTemp('90210') 66.0 >>> server.soapproxy.config.dumpSOAPOut = 1 >>> server.soapproxy.config.dumpSOAPIn = 1 >>> temperature = server.getTemp('90210') *** 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">90210</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">66.0</return> </ns1:getTempResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> ************************************************************************ >>> temperature 66.0 ``` | | | | --- | --- | | \[1\] | 這比直接調用 SOAP 服務時的設置簡單,因為在 WSDL 文件中包含著調用服務所需要的服務 URL 和命名空間。創建 `WSDL.Proxy` 對象將會下載 WSDL 文件,解析之,并設置一個用以調用實際的 SOAP 網絡服務的 `SOAPProxy` 對象。 | | \[2\] | 只要創建了 `WSDL.Proxy` 對象,你就可以像調用 `SOAPProxy` 對象一樣簡單地調用一個函數。這并不奇怪,`WSDL.Proxy` 就是一個具有自省方法的 `SOAPProxy` 封裝套件,所以調用函數的語法也是一樣的。 | | \[3\] | 你可以通過 `server.soapproxy` 訪問 `WSDL.Proxy` 的 `SOAPProxy`。這對于打開查錯模式很重要,這樣一來當你通過 WSDL proxy 調用函數時,它的 `SOAPProxy` 將會把線路上來往的 XML 文檔甩下來。 |
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看