簡(jiǎn)易物件存取協(xié)定(轉(zhuǎn)) -- 告訴你什么是SOAP,繁體
發(fā)表時(shí)間:2023-07-31 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]簡(jiǎn)易物件存取協(xié)定Simple Object Access Protocol (SOAP) 作者: 恆逸資訊 胡百敬 什麼是簡(jiǎn)易物件存取協(xié)定(SOAP),簡(jiǎn)而言之就是利用現(xiàn)存的網(wǎng)際網(wǎng)路架構(gòu)讓應(yīng)用程式之...
簡(jiǎn)易物件存取協(xié)定
Simple Object Access Protocol (SOAP)
作者: 恆逸資訊 胡百敬
什麼是簡(jiǎn)易物件存取協(xié)定(SOAP),簡(jiǎn)而言之就是利用現(xiàn)存的網(wǎng)際網(wǎng)路架構(gòu)讓應(yīng)用程式之間可以彼此溝通,而不會(huì)被防火牆阻礙。在分散式的架構(gòu)下,使用 XML 的環(huán)境中,SOAP提供兩個(gè)電腦系統(tǒng)之間交換的架構(gòu)與資料型別。
在過(guò)去五年來(lái)透過(guò)網(wǎng)際網(wǎng)路存取已經(jīng)變成是較進(jìn)步社會(huì)的基礎(chǔ)需求。在其上執(zhí)行著各式各樣的通訊協(xié)定。但是直至目前為止最廣泛被接受的通訊協(xié)定依然是Hypertext Transfer Protocol(HTTP),它是瀏覽器與Web伺服器之間溝通時(shí)使用,對(duì)於文字、圖形以及其他資訊的傳輸很有效率與彈性,而且它簡(jiǎn)單易懂。
你我所撰寫的應(yīng)用程式利用網(wǎng)際網(wǎng)路在遠(yuǎn)端互動(dòng)已經(jīng)變得越來(lái)越重要,F(xiàn)今在網(wǎng)際網(wǎng)路上提供eService已經(jīng)是大勢(shì)所趨。舉個(gè)例子來(lái)說(shuō),你可能在某一家網(wǎng)路公司所提供的行事曆上註冊(cè),當(dāng)快遞公司要送貨品給你時(shí),它的系統(tǒng)會(huì)自動(dòng)與提供行事曆的網(wǎng)路公司合作,查閱你的在家的時(shí)間,自動(dòng)排定送貨的行程;蛑悄阆雽懸粋(gè)入門網(wǎng)站,但覺(jué)得某個(gè)網(wǎng)站所提供的交通資訊或是天氣預(yù)報(bào)系統(tǒng)很好,你想直接讓你的使用者透過(guò)系統(tǒng)之間的合作,可以在你的網(wǎng)站線上查詢別的網(wǎng)站上這些資料。而那些提供服務(wù)的網(wǎng)站也可以查詢的次數(shù)向你收費(fèi)。
以上這些動(dòng)作都需要系統(tǒng)自動(dòng)完成合作,不再有人工參與。且彼此的系統(tǒng)是各自以他所熟悉的技術(shù)完成,這代表著系統(tǒng)不會(huì)遵循特殊的架構(gòu)。有可能我的系統(tǒng)是Win32,使用的是COM+﹔而你的是UNIX作業(yè)系統(tǒng),利用CORBA提供服務(wù)。
讓兩個(gè)系統(tǒng)透過(guò)網(wǎng)際網(wǎng)路溝通,僅僅用HTTP通訊協(xié)定本身提供的功能是不夠的,雖然HTTP本身的彈性很大,但它基本的設(shè)計(jì)並不適合呼叫遠(yuǎn)端的程式物件。這種互動(dòng)在區(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èn)題。任何連上網(wǎng)際網(wǎng)路的伺服器基本上都可以被任何網(wǎng)際網(wǎng)路的使用者存取,這導(dǎo)致需要較嚴(yán)謹(jǐn)?shù)陌踩剂。為了安全,大部分的企業(yè)都在它們內(nèi)部與外部網(wǎng)路之間加裝防火牆以防止網(wǎng)際網(wǎng)路上的大眾存取企業(yè)內(nèi)部的伺服器。這些防火牆,例如微軟的Proxy伺服器,可以經(jīng)由條件設(shè)定以阻止一些想進(jìn)企業(yè)內(nèi)部來(lái)的公眾網(wǎng)路需求,這可以大幅提昇內(nèi)部系統(tǒng)的安全。
雖然防火牆是提供接上網(wǎng)際網(wǎng)路安全的基礎(chǔ)機(jī)制,但它卻會(huì)降低分散式物件通訊協(xié)定的使用效能。為了要解決這個(gè)問(wèn)題,有識(shí)之士紛紛提出了各自的解決方案。在 1998 年,UserLand 公司的執(zhí)行總裁 Dave Winner 提出透過(guò) XML 讓 RPC 的通訊方式透過(guò) HTTP 協(xié)定在網(wǎng)際網(wǎng)路上執(zhí)行。
這個(gè)想法經(jīng)由微軟公司加以改良,提出了實(shí)際可行的Simple Object Access Protocol(SOAP)通訊協(xié)定,F(xiàn)今正在W3C審議中,已經(jīng)有IBM等大廠表態(tài)支持。不久的未來(lái)即將可能成為在網(wǎng)際網(wǎng)路上提供電子服務(wù)的標(biāo)準(zhǔn)協(xié)定。
SOAP是一個(gè)像DCOM或其他分散式物件通訊協(xié)定的協(xié)定,讓使用者端與伺服端的RPCs可以溝通。但與其他類似協(xié)定不一樣的地方是,它支援防火牆的使用。同樣重要地,SOAP不是只設(shè)計(jì)用來(lái)針對(duì)某種物件技術(shù)的協(xié)定,它不像一些時(shí)下的分散式物件通訊協(xié)定會(huì)被綁死在某一種特定的物件規(guī)格上,這個(gè)協(xié)定將可以被任何的物件使用。所以它將是兩大物件陣營(yíng)COM 和 CORBA 最好的溝通橋樑,讓彼此的物件程式可以跨平臺(tái)透過(guò)網(wǎng)際網(wǎng)路呼叫。
簡(jiǎn)易物件存取協(xié)定如其名稱所言,要求定義要"簡(jiǎn)易",所以它只訂出物件溝通基礎(chǔ)規(guī)範(fàn),如
讓物件透過(guò)網(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)廠商自行實(shí)作。
使用防火牆所造成的問(wèn)題以及 SOAP 所提供的解決方案
要了解為何防火牆會(huì)造成分散式物件通訊協(xié)定的問(wèn)題必須先了解到防火牆是如何分辨協(xié)定之間的不同。在TCP/IP的架構(gòu)下,每一個(gè)被廣泛使用的協(xié)定都被賦予一個(gè)特殊的埠號(hào)(port number)而每一個(gè)使用該協(xié)定的需求封包都帶著這個(gè)埠號(hào)。例如HTTP協(xié)定的埠號(hào)是80、FTP是21等等。大部分的防火牆可以用來(lái)防止某個(gè)特殊協(xié)定的方式就是針對(duì)埠號(hào)拒絕某種協(xié)定的通訊。通常防火牆是被設(shè)定成允許埠號(hào)80的運(yùn)作的-如果該公司不拒絕使用HTTP的話。
但大部分的防火牆會(huì)擋住其他的埠,因?yàn)樗鼈兗俣ɡ闷渌牟簩?duì)公司內(nèi)部網(wǎng)路的運(yùn)作都是有危險(xiǎn)的。 但這也正是造成分散式物件通訊協(xié)定無(wú)法運(yùn)行的原因。不像HTTP、FTP等其他著名的通訊協(xié)定,分散式物件通訊協(xié)定通常沒(méi)有使用一個(gè)著名的大家都知道的埠號(hào)來(lái)溝通。相反地,這些通訊協(xié)定通常動(dòng)態(tài)地被賦予埠號(hào),埠號(hào)碼在被需求時(shí)任意產(chǎn)生。如果沒(méi)有防火牆擋在使用者端與伺服端之間,這種方式將可以很有效地運(yùn)作。但若加了防火牆,則該通訊協(xié)定會(huì)因?yàn)榉阑馉澆辉试S兩端任意使用任何埠號(hào)來(lái)溝通而中斷。
當(dāng)下存在很多種解決方式,例如某些防火牆可以被設(shè)定成允許某個(gè)範(fàn)圍的埠號(hào)碼可以進(jìn)行溝通。若該分散式物件通訊協(xié)定也可以被設(shè)定成只用這個(gè)範(fàn)圍的埠號(hào)碼,則這個(gè)方案便可行,使用者端與伺服端之間可以進(jìn)行溝通。但比較注重安全的網(wǎng)路管理者將不會(huì)贊成開放任意一組埠號(hào)碼而導(dǎo)致這個(gè)方案並不完美。另一個(gè)選擇是採(cǎi)用COM網(wǎng)際網(wǎng)路服務(wù),這讓傳統(tǒng)的DCOM封包在TCP上透過(guò)埠號(hào)80來(lái)傳遞。這在某些方面很有用,但這項(xiàng)技術(shù)只有微軟的Internet Information Server和DCOM在使用,而不是一項(xiàng)完整的解決方案,所以我們需要一個(gè)更普遍一般性的解決方案。
因?yàn)閹缀跛械姆阑馉澏荚试S透過(guò)埠號(hào)80來(lái)溝通,所以透過(guò)埠號(hào)80來(lái)溝通的分散式物件通訊協(xié)定將是一個(gè)較好的方案。但這並不是說(shuō)說(shuō)那麼容易,因?yàn)椴禾?hào)80已經(jīng)被設(shè)定給HTTP協(xié)定。所以SOAP這個(gè)分散式物件通訊協(xié)定是架在HTTP協(xié)定之上的。HTTP通訊協(xié)定相當(dāng)簡(jiǎn)單,僅僅以少數(shù)基礎(chǔ)的動(dòng)詞所組成,如GET、PUT、POST等等,而這些動(dòng)詞在瀏覽器與伺服器之間傳遞。而每一個(gè)動(dòng)詞之後跟著一些資訊,而這些資訊通常以簡(jiǎn)易的字串方式傳遞。
SOAP不能改變?nèi)魏蔚默F(xiàn)狀,也不能要求增加HTTP現(xiàn)有的動(dòng)詞。替代方案是SOAP將使用Extensible Markup Language(XML)來(lái)定義需求與回應(yīng)訊息的格式,並允許使用正常的HTTP POST命令來(lái)傳遞這些訊息。所有的SOAP通訊都使用80埠,這也代表著在網(wǎng)際網(wǎng)路上SOAP可以透過(guò)任何的Web伺服器來(lái)溝通-防火牆將不再是一個(gè)問(wèn)題。 SOAP主要的設(shè)計(jì)目的之一就是保證它可以有效地使用既有的網(wǎng)際網(wǎng)路架構(gòu)-也就是HTTP、防火牆、代理伺服器(proxy)以及其他種種。例如SOAP可以使用Secure Sockets Layer(SSL)通訊協(xié)定以加密維護(hù)安全,使用到HTTP的連線管以機(jī)制,等等更多更多的部分。SOAP讓分散式物件通訊協(xié)定透過(guò)網(wǎng)際網(wǎng)路的溝通像使用瀏覽器來(lái)存取網(wǎng)頁(yè)一樣方便。
在現(xiàn)今這個(gè)世界上已經(jīng)有許多的許多分散是物件通訊協(xié)定,但還沒(méi)有一個(gè)可以不被改變就用在現(xiàn)今的網(wǎng)際網(wǎng)路上。藉由提供一個(gè)架在HTTP之上,簡(jiǎn)單、且有彈性的機(jī)制來(lái)傳送需求與回應(yīng),SOAP讓當(dāng)下觸發(fā)遠(yuǎn)端函數(shù)不需要有任何改變。讓應(yīng)用程式可以透過(guò)網(wǎng)際網(wǎng)路存取不是一件小事。且它並未被綁死在任何一個(gè)單一的物件模型,這項(xiàng)新的技術(shù)擁有可以用在許多不同情況的潛力;兑陨系恼撌,SOAP對(duì)於今日的通訊協(xié)定是一項(xiàng)值得增加的投資。