• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數據加載中……

            Web 服務互操作性和 SOAP

            摘要:本文概要說明了在通過 SOAP 進行 RPC 調用時當前實際存在的互操作性問題,同時討論了導致互操作性問題的三個

            因素:HTTP 問題、XML 問題和 SOAP 間斷性。

            簡介
                   當前有多種創建應用程序的平臺。但每種平臺都習慣于使用自身的協議(本質上通常是二進制代碼)來實現機器間的集
            成。因此,跨平臺的應用程序在數據共享方面的能力相當有限。認識到這些限制后,人們一直在致力于建立有關數據格式
            和數據交換方面的標準,藉此以實現“不論服務采用何種軟件,使用何種硬件,都能夠跨越這一傳統的界限以 Web 的形式
            無縫地將它們集成在一起”這一遠景目標。目前,這一目標已迅速發展成為一種新的計算范例。
            該目標的核心是互操作性概念,即不同系統能夠無縫地進行通信和共享數據。這也是 Web 服務追求的目標。Web 服務是一
            種可以用標準 Internet 協議來訪問的可編程應用邏輯;從另一個角度來說,Web 服務是有關機器間和應用程序間透明通
            信的、借助于 Web 的標準的具體實現。


                   目前,實現機器間消息傳遞的 Web 服務技術多種多樣,例如簡單對象訪問協議 (Simple Object Access Protocol,
            SOAP)、Web 服務說明語言 (Web Service Description Language, WSDL) 和超文本傳輸協議 (HyperText Transfer
            Protocol, HTTP)。這些消息的復雜程度各不相同,既有簡單的方法調用,也有復雜的訂單提交。在 Web 服務的功能中,
            最一般但又較高級的功能是實現 RPC(遠程過程調用)形式的通信(通過 RPC,一臺計算機上的程序可以執行另一臺計算
            機的程序。)本文從實用的角度介紹了在使用 SOAP 進行 RPC 形式的通信時當前常見的互操作性問題,以后還將撰文探討
            有關通過 SOAP、WSDL 以及其它協議傳送消息的問題。


            什么是 SOAP?
                   SOAP 是 Simple Object Access Protocol(簡單對象訪問協議)的縮寫。該協議的當前版本為 1.1,其具體規范發布在下列站點上: www.w3.org/tr/soap(英文)。SOAP 以 XML 為基礎,說明了機器間通信的消息傳送格式。此外,它還包括幾個可選部分,用于描述方法調用 (RPC) 和詳細說明通過 HTTP 發送 SOAP 消息的方法。(有關 SOAP 和 Web 服務的詳細
            背景知識,請參見 Web 服務的平臺(英文)。)


                   以下是一個典型的 SOAP 請求(包括 HTTP 標頭),它請求名為 EchoString 的 RPC 方法調用,并將一個字符串當作參
            數:
            POST /test/simple.asmx HTTP/1.1
            Host: 131.107.72.13
            Content-Type: text/xml; charset=utf-8
            Content-Length: length
            SOAPAction: "http://soapinterop.org/echoString"
            <?xml version="1.0" encoding="utf-8"?>
            <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
            xmlns:tns="http://soapinterop.org/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
            <soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
            <tns:echoString>
            <inputString>string</inputString>
            </tns:echoString>
            </soap:Body>
            </soap:Envelope>


                   如上所示,該請求將方法名編碼為 XML : <tns:echoString>,將字符串參數編碼為 <inputString>。它所代表的 C# 方法
            類似于以下內容:
            public String echoString(String inputString);

                   以下是來自服務器的響應:
            HTTP/1.1 200 OK
            Content-Type: text/xml; charset=utf-8
            Content-Length: length
            <?xml version="1.0" encoding="utf-8"?>
            <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
            xmlns:tns="http://soapinterop.org/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
            <soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
            <tns:echoStringResponse>
            <Return>string</Return>
            </tns:echoStringResponse>
            </soap:Body>
            </soap:Envelope>


                   有關序列化字符串數據類型以及方法調用形狀的規則在 SOAP 1.1 的第 5 節和第 7 節 (www.w3.org/tr/soap(英文))
            中定義。


            常見的互操作性問題
                   當執行 RPC 形式的 SOAP 消息傳送時,可能會因為多種原因導致互操作性問題。有趣的是,許多互操作性問題都不是
            SOAP 本身的問題,而是基本傳輸引擎或 XML 引擎所導致的互操作性問題。也就是說,互操作性問題可能是:HTTP 問題XML 問題,或SOAP 間斷性 還應指出的是,這些規范的制定者也有考慮不周的地方,他們有時可能會模棱兩可,這樣就很難確定唯一正確的行為。傳輸問題XML Web 服務消息的核心在于發送消息的傳輸機制。當通過 SOAP 進行 RPC 調用時,HTTP 是目前最為常用的傳輸機制。


                   這意味著 SOAP 堆棧之間必然存在 HTTP 互操作性問題。HTTP 互操作性問題的一個簡單示例就是 SOAPAction 的使用。SOAPAction 是一種 HTTP 標頭,它必須存在于通過 HTTP 傳送的 SOAP 消息中。此標頭可以賦以多個不同的值,例如:
            SOAPAction: "http://tempuri.org/"
            SOAPAction 的值雖然可以完全為空,但必須用引號引起來:
            SOAPAction:
                   問題就在這兒:如果服務器要求空值 SOAPAction,有些客戶端將無法滿足這一要求,因為并非所有 HTTP 客戶端 API 都具有設置空 HTTP 標頭值的方法。這種問題可能存在兩種解決方法:修正客戶端 API 和/或確保服務器不要求空值SOAPAction。通常,避免這類問題的唯一方法是確保所使用的 HTTP API 穩定強壯,并且已知可以在 Web 上工作。即便如
            此,這類問題仍可能出現;要徹底消除它們,測試可能是唯一的方法。


            XML 問題
                   這是可能存在的第二類互操作性問題,它們涉及到 XML 語法分析和 XSD 架構處理。SOAP 使用 XML 和 XML 架構作為核心,因此這兩者的互操作性是 SOAP 互操作性的基礎。


                   有一個有趣的互操作性問題示例,它同時涉及到 XML 語法分析和 HTTP 傳輸,并且與字節順序標記 (Byte Order Mark,
            BOM) 相關。當通過 HTTP 發送數據時,您可以在 Content-Type 標頭中指定數據的編碼形式,如 UTF-16 或 UTF-8。也可
            以通過插入一組用來指定編碼形式的字節來表示某一段 XML 的編碼形式。當發送 UTF-16 時,即使 Content-Type 標頭中
            指定了編碼形式,也仍需要 BOM 來指示是 big-endian 還是 little-endian;但對于 UTF-8,BOM 則是不必要的。例如:


            HTTP/1.1 200 OK
            Content-Type: text/xml; charset=utf-8
            Content-Length: length
            n++<?xml version="1.0" encoding="utf-8"?>
            <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
            xmlns:tns="http://soapinterop.org/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
            <soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
            <tns:echoStringResponse>
            <Return>string</Return>
            </tns:echoStringResponse>
            </soap:Body>
            </soap:Envelope>


                   示例中的前三個字符是字節順序標記的十六進制代碼,用于指示編碼形式為 UTF-8,不過,您可以看到,Content-Type 也指出了這點。即使不需要,但是有些實現方案仍會為 UTF-8 發送 BOM。而其它實現方案有了 BOM 反而無法處理 XML。為了解決這一問題,應避免在不需要的時候發送 BOM,并且應正確處理 BOM。由于在處理 UTF-16 消息時需要 BOM,所以在這種情況下務必要正確處理 BOM。雖然沒有任何單一的方法可以提早解決這些問題,不過當發現問題時,最好的方法就是
            參考描述標準的具體規范(通常在 W3C 上可以找到),然后應用這些規范來評判遇到的問題。


            SOAP 問題
                   現在,我們將討論問題的核心:SOAP 問題本身。如上所述,SOAP 的互操作性首先要求解決傳輸(通常是 HTTP)和 XML 問題。解決這兩個問題之后,再來解決 SOAP 問題。SOAP 本身的問題相對簡單。它要求將消息裝入信封,并將消息的實際內容放在正文元素中。SOAP 使標頭等元素成為可選項,對正文元素中可包含的內容允許存在一定的靈活性。以下是一個簡單的 SOAP 消息示例,大多數堆棧與它進行互操作時不會存在問題:
            <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
            <soap:Body >
            <foo />
            </soap:Body>
            </soap:Envelope>


                   雖然這個示例不是十分有趣,但是 SOAP 還提供一種對常見數據類型進行編碼的方法(請參見 SOAP 規范的第 5 節),它進一步說明了如何對 RPC 方法調用進行編碼。您可能已注意到,在前面的示例中,方法名是正文的子標記,參數則是方法名的子標記。即使不用這么麻煩,您也可以找到許多有趣的互操作性問題。例如,SOAP 規范規定,如果您收到mustUnderstand 屬性設置為“1”的 SOAP 標頭,就必須理解它,否則將出錯。但許多實現方案并沒有做到這點。以下是 mustUnderstand 標頭的
            示例:
            HTTP/1.1 200 OK
            Content-Type: text/xml; charset=utf-8
            Content-Length: length
            n++<?xml version="1.0" encoding="utf-8"?>
            <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
            xmlns:tns="http://soapinterop.org/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
            <SOAP-ENV:Header>
            <Foo SOAP-ENV:mustUnderstand="1">
            Hello!
            </Foo>
            </SOAP-ENV:Header>
            <soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
            <tns:echoStringResponse>
            <Return>string</Return>
            </tns:echoStringResponse>
            </soap:Body>
            </soap:Envelope>


                   這個示例是通過 SOAP 互操作性測試發現的眾多問題之一。有關現已發現的互操作性問題的更多示例,請參見
            http://groups.yahoo.com/group/soapbuilders(英文)中的檔案。總之,為了確保 SOAP 在實現 RPC 形式通信時的互操
            作性,全世界的 SOAP 構建者已經做了很多工作,并取得了豐碩的成果。從 5 月 8 日到 5 月 10 日,在拉斯維加斯將舉
            行 Networld+Interop 會議,到時,SOAP 團體的許多成員將在會上將充分展示這方面的成果。如果您在使用 SOAP 堆棧或
            對其感興趣,歡迎惠顧這次演示會。


                   另外,有關 XML Web 服務的許多討論和測試已經在 http://groups.yahoo.com/group/soapbuilders(英文)、
            http://www.mssoapinterop.org/(英文)和 http://www.xmethods.net/ilab/(英文)等站點上進行。這些站點包含到許
            多互操作性測試端點的鏈接。構建 SOAP 堆棧的所有人員都應該閱讀這些檔案并參與互操作性測試。
            后續話題


                   本文簡要概括了在 XML Web 服務領域中發現的一些早期互操作性問題。不過,這方面的討論并不會就此停止。除了通過 HTTP 進行 RPC 調用之外,SOAP 還有許多更為有趣的情況需要討論。其中包括“document”形式的消息傳遞、基于 SMTP 和其它傳輸機制的 SOAP、WSDL 以及各種 SOAP 標頭測試 - 所有這些都值得在今后的文章中進行討論。

            posted on 2008-05-28 15:31 肥仔 閱讀(264) 評論(0)  編輯 收藏 引用 所屬分類: 網絡編程

            欧美色综合久久久久久| 久久精品国产免费| 久久亚洲国产成人影院| 久久久久久久97| 久久精品国产91久久麻豆自制| 99久久综合狠狠综合久久| 久久精品国产亚洲7777| 亚洲av成人无码久久精品| 青青国产成人久久91网| 日韩欧美亚洲综合久久| 狠狠色丁香婷婷久久综合不卡| 久久精品无码av| 丰满少妇高潮惨叫久久久| 亚洲人成无码网站久久99热国产 | 亚洲国产欧洲综合997久久| 国产精品禁18久久久夂久| 久久夜色撩人精品国产| 久久A级毛片免费观看| 久久久久一本毛久久久| 久久精品无码专区免费青青| 久久久这里只有精品加勒比| 久久久艹| 国产午夜电影久久| 亚洲第一极品精品无码久久| 无码乱码观看精品久久| 精品国产青草久久久久福利 | 精品欧美一区二区三区久久久 | 国产99久久精品一区二区| 热99RE久久精品这里都是精品免费| 精品久久久久久国产| 日产精品久久久久久久性色| av色综合久久天堂av色综合在| 久久综合久久伊人| 久久精品亚洲乱码伦伦中文| 精品精品国产自在久久高清| 亚洲国产精品久久久久网站| 亚洲国产成人久久综合碰碰动漫3d | 久久人做人爽一区二区三区 | 精品久久久久久中文字幕| 欧美丰满熟妇BBB久久久| 精品久久久无码21p发布|