淺談SOAP (轉)

來源:互聯網
上載者:User
2001 年 8 月
本文對SOAP作了一個初步介紹,給出幾個簡單樣本;接著比較CORBA,DCOM/COM與SOAP的聯絡與區別;然後淺析SOAP簡單的理解為RPC+HTTP+XML時的運行機制;最後展現SOAP的前景。

一:為什麼需要SOAP?
隨著電腦技術的不斷髮展,現代企業面臨的環境越來越複雜,其資訊系統大多數為多平台、多系統的複雜系統。這就要求今天的企業解決方案具有廣泛的相容能力,可以支援不同的系統平台、資料格式和多種串連方式,要求在Internet 環境下,實現系統是鬆散耦合的、跨平台的,與語言無關的,與特定介面無關的,而且要提供對Web 應用程式的可靠訪問。
隨著異種計算環境的不斷增加,各種系統間的互通性就愈顯得必要,要求系統能夠無縫地進行通訊和共用資料,從而在 Internet 環境下,消除巨大的資訊孤島,實現資訊共用、進行資料交換,達到資訊的一致性。Web services 希望實現不同的系統之間能夠用"軟體-軟體對話"的方式相互調用,打破了軟體應用、網站和各種裝置之間的格格不入的狀態,實現"基於WEB無縫整合"的目標。
今年四月份的時候,W3C聯盟召開了第一次 Web 服務專題研討會,目的為探索 W3C 應向哪個方向發展才能實現新興的 Web 服務架構的標準化,期間提出了一個"Web 服務堆棧"的構想,如下圖,從圖中可以看出,SOAP在WEB服務堆棧中作為用於 XML 訊息傳遞的一種非常普遍的協議,發揮著十分重要的作用。

二:什麼是SOAP?
SOAP(Simple Object Access Protocol )簡易物件存取通訊協定 (SOAP)是在分散或分布式的環境中交換資訊的簡單的協議,是一個基於XML的協議,它包括四個部分:SOAP封裝(envelop),封裝定義了一個描述訊息中的內容是什麼,是誰發送的,誰應當接受並處理它以及如何處理它們的架構;SOAP編碼規則(encoding rules),用於表示應用程式需要使用的資料類型的執行個體; SOAP RPC表示(RPC representation),表示遠端程序呼叫和應答的協定;SOAP綁定(binding),使用底層協議交換資訊。
雖然這四個部分都作為SOAP的一部分,作為一個整體定義的,但他們在功能上是相交的、彼此獨立的。特別的,信封和編碼規則是被定義在不同的XML命名空間(namespace)中,這樣使得定義更加簡單。
SOAP的兩個主要設計目標是簡單性和可擴充性。這就意味著有一些傳統訊息系統或分布式對象系統中的某些性質將不是SOAP規範的一部分。比如:分布式垃圾收集 (Distributed garbage collection)、成批傳送訊息(Boxcarring or batching of messages)、對象引用 (Objects-by-reference(which requires distributed garbage collection))、對象啟用 (Activation(which requires objects-by-reference))。
SOAP訊息舉例:
1.第一個例子闡明了SOAP中一個簡單的通訊資訊,包括了兩個不是SOAP定義而是應用程式定義的元素:頭塊元素alertcontrol 和體塊元素alert。頭塊元素包括兩個參數:priority 和expires。體塊元素包括的是實際傳送的資訊。

(EXAMPLE 1)
2.SOAP通訊與底層的不同協議和不同的交換格式有關,下面的例子SOAP使用HTTP作為底層通訊協定,從而可以很好的使用request/response機制來傳送資訊。 SOAP/HTTP請求包括一個GetLastTradePrice的塊元素,該請求攜帶一個字串參數和ticker符號,在SOAP應答中返回一個浮點數。XML名域用來區分SOAP標誌符和應用程式特定的標誌符。

(EXAMPLE 2)
3. 例3 展示的是StockQuote SOAP服務資訊,是對例2的請求作出的一條應答訊息。

(EXAMPLE 3)
三:SOAP與CORBA,COM/DCOM的區別?
在SOAP剛剛提出來的時候,許多人就提出了疑問:SOAP與CORBA和DCOM的區別何在?
  1. CORBA(Common Object Request Broker Architecture)公用對象請求代理體繫結構是由OMG組織制訂的一種標準的物件導向應用程式體系規範。由對象請求代理ORB、物件服務、公用設施、域介面和應用介面這幾個部分組成。其核心部分是對象請求代理ORB(Object Request Broker)。ORB提供了一種機制,通過這種機制,對象可以透明的發出請求和接收響應。分布的、可以互操作的對象可以利用ORB構造可以互操作的應用。ORB可看作是在對象之間建立客戶/服務關係的一種中介軟體。基於ORB,客戶可以透明的調用服務物件提供的方法,該服務物件可以與客戶運行在同一台機器上,也可以運行在其他機器上通過網路與客戶進行互動。ORB截取客戶發送的請求,並負責在該軟體匯流排上找到實現該請求的服務物件,然後完成參數、方法調用,並返回最終結果。CORBA 1.1 由對象管理組織在 1991 年發布。定義了介面定義語言(IDL)和應用編程介面(API),從而通過實現對象請求代理(ORB)來啟用客戶/伺服器的互動。CORBA 2.0 於 1994 年的 12 月發布定義了如何跨越不同的 ORB 提供者而進行通訊。
  2. COM/DCOM(Component Object Model / Distributed Component Object Model )是微軟公司提出的分散式元件物件模型標準,支援在區域網路、廣域網路甚至Internet上不同電腦的對象之間的通訊。DCOM基於COM的應用程式、組件、工具等的基礎之上,處理網路通訊協定的低層次的細節問題,而不必關心太多的網路通訊協定細節,從而使使用者能夠集中精力解決使用者所要求的問題。DCOM位於應用程式的組件之間,將組件以不可見的方式膠合在一起組成具有完整功能的應用程式。
  3. SOAP 與CORBA,DCOM/COM的比較。
    3.1 首先指出的是SOAP不會取代CORBA,COM/DCOM,三者的概念有所區別。COM/DCOM是個組件模型標準,CORBA是分布式應用的服務標準。CORBA和DCOM為分布式應用程式建立服務,服務物件來執行用戶端調用的服務。而SOAP是基於XML和HTTP的分布式對象的通訊協定,是COM/DCOM和CORBA對象進行通訊的協議。實際上,利用SOAP的互通性和CORBA強大的執行能力,兩者可以很好的結合在一起。 OMG (Object Management Group responsible for the CORBA specification)正在關注這方面的發展。
    3.2. CORBA應用程式和DCOM應用程式不能實現互操作,兩者不能在一起協作。因為在ORPC(Object RPC)協議中,用ObjRef代表了一個正在運行對象的引用;在CORBA/IIOP(Internet Inter-Orb Protocol)中,用交換可互操作對象引用IOR(Interoperable Object Reference)代表一個伺服器的對象引用。不幸的是,IOR 與 ObjRef不能夠關聯起來。然而,使用SOAP可以實現在垂直應用程式層面上CORBA ,DCOM技術的水平整合,能夠更好的整合CORBA,DCOM為一個整體。
    3.3 SOAP並沒有定義資訊的語義,服務品質,基於INTERNET的交易處理。而是採用 XML 進行訊息編碼,正確的處理需要伺服器和用戶端本身來執行,理解和執行彼此使用的資訊格式(ONE-TO-ONE,REQUEST/REPLY,BROADCAST,ETC),應用程式本身在語義解析中扮演著十分重要的角色。而CORBA,DCOM表示了傳送資訊的語義,對參數和傳回值使用二進位編碼。可對諸如參數名稱或類型的任何元資訊都不編碼,但使中介很難處理訊息。又因為每個系統使用不同的二進位編碼,系統間的互操作的很難實現。
    3.4 儘管CORBA可以在不同的平台上執行,DCOM可以在微軟的各種平台上運行,但是基於CORBA和DCOM的解決方案必須依賴於單一的應用程式。比如說,假如啟動並執行是DCOM伺服器程式,所有的分布式的用戶端不得不運行於微軟的操作平台上。CORBA 雖然可以運行於不同的平台,但CORBA的互通性並沒有在更高層的服務上進行擴充,如安全性和交易處理,在這種情況下,許多提供的服務沒有得到很好的最佳化。DCOM和CORBA適合於伺服器--伺服器間的通訊,但是對於用戶端--伺服器的通訊十分脆弱,尤其當客戶程式分布在INTERNET上更是如此。
    3.5 SOAP不象DCOM一樣試圖定義分布式系統的所有元素,SOAP沒有提供分布式類庫,型別安全檢查,版本控制等等,SOAP比它處於一個更低的層次,有點類似於IIOP在CORBA的作用,DCOM卻提供了一些額外的協議功能,是IIOP 或者SOAP所不具備的。然而,許多. DCOM的額外功能只有在伺服器――伺服器間通訊時才會用到,對於用戶端――伺服器之間的通訊則是多餘的。

四:SOAP=RPC+HTTP+XML
SOAP簡單的理解,就是這樣的一個開放協議SOAP=RPC+HTTP+XML:採用HTTP作為底層通訊協議;RPC作為一致性的調用途徑,XML作為資料傳送的格式,允許服務提供者和服務客戶經過防火牆在INTERNET進行通訊互動。RPC的描敘可能不大準確,因為SOAP一開始構思就是要實現平台與環境的無關性和獨立性,每一個通過網路的遠程調用都可以通過SOAP封裝起來,包括DCE(Distributed Computing Environment ) RPC CALLS,COM/DCOM CALLS, CORBA CALLS, JAVA CALLS,etc。
SOAP 使用 HTTP 傳送 XML,儘管HTTP 不是有效率的通訊協議,而且 XML 還需要額外的檔案解析(parse),兩者使得交易的速度大大低於其它方案。但是XML 是一個開放、健全、有語義的訊息機制,而 HTTP 是一個廣泛又能避免許多關於防火牆的問題,從而使SOAP得到了廣泛的應用。但是如果效率對你來說很重要,那麼你應該多考慮其它的方式,而不要用 SOAP。
為了更好的理解SOAP,HTTP,XML如何工作的,不妨先考慮一下COM/DCOM的運行機制,DCOM處理網路通訊協定的低層次的細節問題,如PROXY/STUB間的通訊,生命週期的管理,對象的標識。在用戶端與伺服器端進行互動的時候,DCOM採用NDR(Network Data Representation)作為資料表示,它是低層次的與平台無關的資料表現形式。
DCOM是有效,靈活的,但也是很複雜的。而SOAP的一個主要優點就在於它的簡單性,SOAP使用HTTP作為網路通訊協議,接受和傳送資料參數時採用XML作為資料格式,從而代替了DCOM中的NDR格式,SOAP和 DCOM執行過程是類似的,如下圖,但是用XML取代 NDR作為編碼錶現形式,提供了更高層次上的抽象,與平台和環境無關。

用戶端發送請求時,不管用戶端是什麼平台的,首先把請求轉換成XML格式,SOAP網關可自動執行這個轉換。為了保證傳送時參數,方法名,傳回值的唯一性,SOAP協議使用了一個私人標記表,從而服務端的SOAP網關可以正確的解析,這有點類似於COM/DCOM
中的樁(STUB)。轉化成XML格式後,SOAP終端名(遠程調用方法名)及其他的一些協議標識資訊被封裝成HTTP請求,然後發送給伺服器。如果應用程式要求,伺服器返回一個HTTP應答資訊給用戶端。與通常對HTML頁面的HTTP GET請求不同的是,此請求設定了一些HTTP HEADER,標識著一個SOAP服務激發,和HTTP包一起傳送。例如:對於一個詢問股票價格的應用程式,伺服器端具有組件提供某股票當前的價格,組件是COM或CORBA在伺服器上建立的。用戶端發送一個SOAP請求給伺服器詢問股票價格。伺服器依賴於伺服器上的SOAP網關,使用內嵌的HTML對象調用合適的方法, 然後把得到的價格通過SOAP應答傳給用戶端。
五.SOAP 的前景
W3C於2000年5月8日發表了Simple Object Access Protocol (SOAP) 1.1版本,具體規範發布在下列網站上(http://www.w3.org/TR/SOAP/)。又與今年7月9號推出了SOAP Version 1.2版本的建議草案,具體規範發布在下列網站上(http://www.w3.org/TR/soap12/)。編寫SOAP Version 1.1版本的工作小組的成員包括:DevelopMentor, International Business Machines Corporation, Lotus Development Corporation, Microsoft, UserLand Software。
SOAP的推出是令人興奮的。可以相信,隨著網路服務的的不斷髮展,它將極大的改變我們的思考模式和開發模式。現在,已有許多大公司著手支援SOAP的開發,去年 IBM公司 和 Microsoft公司 都發行了實現 SOAP 的第一批版本。 IBM 公司啟動了Apache SOAP 專案計劃,微軟最近又推出了SOAPtoolkit2.0的正式版,主要包括如下的一些特徵:SOAP的高層介面和低層介面,訊息對象介面,完全支援WSDL 1.1標準,支援使用者自訂類型映射,並且提供了豐富和完整的開發文檔以及應用執行個體。而且,兩家公司正在互通性方面努力研究。可以樂觀的估計,不用多久,SOAP 互通性的時代就將來臨。
與SOAP相關的一些標準:
  1. HTTP 1.0 or greater(http://www.w3.org/Protocols/HTTP/ietf-http-ext)
  2. the core W3C XML recommendation(http://www.w3.org/TR/1998/REC-xml-19980210)
  3. W3C XML namespace recommendation(http://www.w3.org/TR/REC-xml-names).
  4. XML Schema(http://www.w3.org/TR/xmlschema-1/)

目前支援SOAP的一些公司產品:
Organization ProductRogue WaveNouveau ORBIonaOrbix 2000ObjectSpaceVoyagerDigital CreationsZope, the Python Application ServerUserLandFrontier groupware productMicrosoftWindows DNA 2000
SOAP是一個協議,與程式設計語言無關。實際上,許多語言已經開始支援SOAP,如:java,c/c++,vb,c#,perl,php.下面列出了在Java/C++/Perl/ADA/Python環境下SOAP的執行工具:
  1. Java: Apache SOAP , DevelopMentor's implementation, IdooXoap from ZVON
  2. Python: PythonWare (client side only)
  3. C++: IdooXoap from ZVON
  4. Perl: SOAP::Lite
  5. ADA: An ADA implementation
  6. Microsoft Visual Studio: The Microsoft SOAP toolkit.

參考資料
  1. http://www.cn.ibm.com/developerWorks/xml/index.shtml(IBM公司)
  2. http://msdn.microsoft.com/(微軟公司)
  3. http://www.w3.org/TR/soap12/(W3C聯盟)
  4. http://www.soaprpc.com/
  5. http://www.webservices.org
  6. http://www.soapwebservices.com
  7. http://www.xml.org.cn(中國xml聯盟)
鑒於SOAP是當前的新技術,國內資料貧乏,主要參考了國外的一些資料及IBM和MICROSOFT的相關資料,文章偏頗之處,請多指教!
作者介紹
段智華: 進階軟體工程師,對工作流程系統有深入研究,曾參與基於XML的SU-PDM2.0產品資料管理系統的開發。目前在上海市易方公司從事SOAP/XML的研究。可通過E-mail:duanzhihua@263.net與作者聯絡。
原文地址:http://www-900.ibm.com/developerWorks/xml/x-sisoap/index.shtml

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

11.11 Big Sale for Cloud

Get Unbeatable Offers with up to 90% Off,Oct.24-Nov.13 (UTC+8)

Get It Now >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。