?? 簡易物件存取協(xié)定(轉(zhuǎn)) -- 告訴你什么是soap,繁體.txt
字號:
作者:jeru
email: jeru@163.net
日期:2001-7-13 16:56:11
簡易物件存取協(xié)定
Simple Object Access Protocol (SOAP)
作者: 恆逸資訊 胡百敬
什麼是簡易物件存取協(xié)定(SOAP),簡而言之就是利用現(xiàn)存的網(wǎng)際網(wǎng)路架構(gòu)讓應(yīng)用程式之間可以彼此溝通,而不會被防火牆阻礙。在分散式的架構(gòu)下,使用 XML 的環(huán)境中,SOAP提供兩個電腦系統(tǒng)之間交換的架構(gòu)與資料型別。
在過去五年來透過網(wǎng)際網(wǎng)路存取已經(jīng)變成是較進(jìn)步社會的基礎(chǔ)需求。在其上執(zhí)行著各式各樣的通訊協(xié)定。但是直至目前為止最廣泛被接受的通訊協(xié)定依然是Hypertext Transfer Protocol(HTTP),它是瀏覽器與Web伺服器之間溝通時使用,對於文字、圖形以及其他資訊的傳輸很有效率與彈性,而且它簡單易懂。
你我所撰寫的應(yīng)用程式利用網(wǎng)際網(wǎng)路在遠(yuǎn)端互動已經(jīng)變得越來越重要。現(xiàn)今在網(wǎng)際網(wǎng)路上提供eService已經(jīng)是大勢所趨。舉個例子來說,你可能在某一家網(wǎng)路公司所提供的行事曆上註冊,當(dāng)快遞公司要送貨品給你時,它的系統(tǒng)會自動與提供行事曆的網(wǎng)路公司合作,查閱你的在家的時間,自動排定送貨的行程。或著是你想寫一個入門網(wǎng)站,但覺得某個網(wǎng)站所提供的交通資訊或是天氣預(yù)報系統(tǒng)很好,你想直接讓你的使用者透過系統(tǒng)之間的合作,可以在你的網(wǎng)站線上查詢別的網(wǎng)站上這些資料。而那些提供服務(wù)的網(wǎng)站也可以查詢的次數(shù)向你收費。
以上這些動作都需要系統(tǒng)自動完成合作,不再有人工參與。且彼此的系統(tǒng)是各自以他所熟悉的技術(shù)完成,這代表著系統(tǒng)不會遵循特殊的架構(gòu)。有可能我的系統(tǒng)是Win32,使用的是COM+﹔而你的是UNIX作業(yè)系統(tǒng),利用CORBA提供服務(wù)。
讓兩個系統(tǒng)透過網(wǎng)際網(wǎng)路溝通,僅僅用HTTP通訊協(xié)定本身提供的功能是不夠的,雖然HTTP本身的彈性很大,但它基本的設(shè)計並不適合呼叫遠(yuǎn)端的程式物件。這種互動在區(qū)域網(wǎng)路內(nèi)一般是使用Remote Procedure Call(RPC),也就是使用者端傳出一些參數(shù),並由伺服端回傳一些結(jié)果。
現(xiàn)今已有許多分散式物件通訊協(xié)定(distributed object protocols) 提供遠(yuǎn)端程式間的溝通。例如微軟的Distribured Component Object Model(DCOM)、Object Management Group的Internet Inter-ORB Protocol(IIOP)等等。所有這些服務(wù)都提供相同的服務(wù),也就是讓使用者端可以觸發(fā)RPC到伺服端應(yīng)用程式,並接到回傳結(jié)果。 在企業(yè)內(nèi)部網(wǎng)路(Intranet)上使用分散式物件傳輸協(xié)定有很好的效果。但在公眾的網(wǎng)際網(wǎng)路上使用這些協(xié)定就有很多問題。任何連上網(wǎng)際網(wǎng)路的伺服器基本上都可以被任何網(wǎng)際網(wǎng)路的使用者存取,這導(dǎo)致需要較嚴(yán)謹(jǐn)?shù)陌踩剂俊榱税踩蟛糠值钠髽I(yè)都在它們內(nèi)部與外部網(wǎng)路之間加裝防火牆以防止網(wǎng)際網(wǎng)路上的大眾存取企業(yè)內(nèi)部的伺服器。這些防火牆,例如微軟的Proxy伺服器,可以經(jīng)由條件設(shè)定以阻止一些想進(jìn)企業(yè)內(nèi)部來的公眾網(wǎng)路需求,這可以大幅提昇內(nèi)部系統(tǒng)的安全。
雖然防火牆是提供接上網(wǎng)際網(wǎng)路安全的基礎(chǔ)機(jī)制,但它卻會降低分散式物件通訊協(xié)定的使用效能。為了要解決這個問題,有識之士紛紛提出了各自的解決方案。在 1998 年,UserLand 公司的執(zhí)行總裁 Dave Winner 提出透過 XML 讓 RPC 的通訊方式透過 HTTP 協(xié)定在網(wǎng)際網(wǎng)路上執(zhí)行。
這個想法經(jīng)由微軟公司加以改良,提出了實際可行的Simple Object Access Protocol(SOAP)通訊協(xié)定。現(xiàn)今正在W3C審議中,已經(jīng)有IBM等大廠表態(tài)支持。不久的未來即將可能成為在網(wǎng)際網(wǎng)路上提供電子服務(wù)的標(biāo)準(zhǔn)協(xié)定。
SOAP是一個像DCOM或其他分散式物件通訊協(xié)定的協(xié)定,讓使用者端與伺服端的RPCs可以溝通。但與其他類似協(xié)定不一樣的地方是,它支援防火牆的使用。同樣重要地,SOAP不是只設(shè)計用來針對某種物件技術(shù)的協(xié)定,它不像一些時下的分散式物件通訊協(xié)定會被綁死在某一種特定的物件規(guī)格上,這個協(xié)定將可以被任何的物件使用。所以它將是兩大物件陣營COM 和 CORBA 最好的溝通橋樑,讓彼此的物件程式可以跨平臺透過網(wǎng)際網(wǎng)路呼叫。
簡易物件存取協(xié)定如其名稱所言,要求定義要"簡易",所以它只訂出物件溝通基礎(chǔ)規(guī)範(fàn),如
讓物件透過網(wǎng)際網(wǎng)路提出需求的方式標(biāo)準(zhǔn)化,以 HTTP 當(dāng)傳輸?shù)姆绞剑?XML 描述溝通的內(nèi)容
建立可延伸的傳遞物件呼叫格式的承載 但它不定義一些一般分散式物件系統(tǒng)需要定義的
分散式系統(tǒng)資源回收(garbage collection)
雙向的 HTTP 溝通
物件參照
物件初始化
以上這些不明確定義的規(guī)格都交由各系統(tǒng)廠商自行實作。
使用防火牆所造成的問題以及 SOAP 所提供的解決方案
要了解為何防火牆會造成分散式物件通訊協(xié)定的問題必須先了解到防火牆是如何分辨協(xié)定之間的不同。在TCP/IP的架構(gòu)下,每一個被廣泛使用的協(xié)定都被賦予一個特殊的埠號(port number)而每一個使用該協(xié)定的需求封包都帶著這個埠號。例如HTTP協(xié)定的埠號是80、FTP是21等等。大部分的防火牆可以用來防止某個特殊協(xié)定的方式就是針對埠號拒絕某種協(xié)定的通訊。通常防火牆是被設(shè)定成允許埠號80的運作的-如果該公司不拒絕使用HTTP的話。
但大部分的防火牆會擋住其他的埠,因為它們假定利用其他的埠對公司內(nèi)部網(wǎng)路的運作都是有危險的。 但這也正是造成分散式物件通訊協(xié)定無法運行的原因。不像HTTP、FTP等其他著名的通訊協(xié)定,分散式物件通訊協(xié)定通常沒有使用一個著名的大家都知道的埠號來溝通。相反地,這些通訊協(xié)定通常動態(tài)地被賦予埠號,埠號碼在被需求時任意產(chǎn)生。如果沒有防火牆擋在使用者端與伺服端之間,這種方式將可以很有效地運作。但若加了防火牆,則該通訊協(xié)定會因為防火牆不允許兩端任意使用任何埠號來溝通而中斷。
當(dāng)下存在很多種解決方式,例如某些防火牆可以被設(shè)定成允許某個範(fàn)圍的埠號碼可以進(jìn)行溝通。若該分散式物件通訊協(xié)定也可以被設(shè)定成只用這個範(fàn)圍的埠號碼,則這個方案便可行,使用者端與伺服端之間可以進(jìn)行溝通。但比較注重安全的網(wǎng)路管理者將不會贊成開放任意一組埠號碼而導(dǎo)致這個方案並不完美。另一個選擇是採用COM網(wǎng)際網(wǎng)路服務(wù),這讓傳統(tǒng)的DCOM封包在TCP上透過埠號80來傳遞。這在某些方面很有用,但這項技術(shù)只有微軟的Internet Information Server和DCOM在使用,而不是一項完整的解決方案,所以我們需要一個更普遍一般性的解決方案。
因為幾乎所有的防火牆都允許透過埠號80來溝通,所以透過埠號80來溝通的分散式物件通訊協(xié)定將是一個較好的方案。但這並不是說說那麼容易,因為埠號80已經(jīng)被設(shè)定給HTTP協(xié)定。所以SOAP這個分散式物件通訊協(xié)定是架在HTTP協(xié)定之上的。HTTP通訊協(xié)定相當(dāng)簡單,僅僅以少數(shù)基礎(chǔ)的動詞所組成,如GET、PUT、POST等等,而這些動詞在瀏覽器與伺服器之間傳遞。而每一個動詞之後跟著一些資訊,而這些資訊通常以簡易的字串方式傳遞。
SOAP不能改變?nèi)魏蔚默F(xiàn)狀,也不能要求增加HTTP現(xiàn)有的動詞。替代方案是SOAP將使用Extensible Markup Language(XML)來定義需求與回應(yīng)訊息的格式,並允許使用正常的HTTP POST命令來傳遞這些訊息。所有的SOAP通訊都使用80埠,這也代表著在網(wǎng)際網(wǎng)路上SOAP可以透過任何的Web伺服器來溝通-防火牆將不再是一個問題。 SOAP主要的設(shè)計目的之一就是保證它可以有效地使用既有的網(wǎng)際網(wǎng)路架構(gòu)-也就是HTTP、防火牆、代理伺服器(proxy)以及其他種種。例如SOAP可以使用Secure Sockets Layer(SSL)通訊協(xié)定以加密維護(hù)安全,使用到HTTP的連線管以機(jī)制,等等更多更多的部分。SOAP讓分散式物件通訊協(xié)定透過網(wǎng)際網(wǎng)路的溝通像使用瀏覽器來存取網(wǎng)頁一樣方便。
在現(xiàn)今這個世界上已經(jīng)有許多的許多分散是物件通訊協(xié)定,但還沒有一個可以不被改變就用在現(xiàn)今的網(wǎng)際網(wǎng)路上。藉由提供一個架在HTTP之上,簡單、且有彈性的機(jī)制來傳送需求與回應(yīng),SOAP讓當(dāng)下觸發(fā)遠(yuǎn)端函數(shù)不需要有任何改變。讓應(yīng)用程式可以透過網(wǎng)際網(wǎng)路存取不是一件小事。且它並未被綁死在任何一個單一的物件模型,這項新的技術(shù)擁有可以用在許多不同情況的潛力。基於以上的論述,SOAP對於今日的通訊協(xié)定是一項值得增加的投資。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -