com/dcom(component object model / distributed component object model )是微軟公司提出的分布式組件對(duì)象模型標(biāo)準(zhǔn),支持在局域網(wǎng)、廣域網(wǎng)甚至internet上不同計(jì)算機(jī)的對(duì)象之間的通訊。dcom基于com的應(yīng)用程序、組件、工具等的基礎(chǔ)之上,處理網(wǎng)絡(luò)協(xié)議的低層次的細(xì)節(jié)問題,而不必關(guān)心太多的網(wǎng)絡(luò)協(xié)議細(xì)節(jié),從而使用戶能夠集中精力解決用戶所要求的問題。dcom位于應(yīng)用程序的組件之間,將組件以不可見的方式膠合在一起組成具有完整功能的應(yīng)用程序。
soap 與corba,dcom/com的比較。 3.1 首先指出的是soap不會(huì)取代corba,com/dcom,三者的概念有所區(qū)別。com/dcom是個(gè)組件模型標(biāo)準(zhǔn),corba是分布式應(yīng)用的服務(wù)標(biāo)準(zhǔn)。corba和dcom為分布式應(yīng)用程序建立服務(wù),服務(wù)對(duì)象來執(zhí)行客戶端調(diào)用的服務(wù)。而soap是基于xml和http的分布式對(duì)象的通信協(xié)議,是com/dcom和corba對(duì)象進(jìn)行通訊的協(xié)議。實(shí)際上,利用soap的互操作性和corba強(qiáng)大的執(zhí)行能力,兩者可以很好的結(jié)合在一起。 omg (object management group responsible for the corba specification)正在關(guān)注這方面的發(fā)展。 3.2. corba應(yīng)用程序和dcom應(yīng)用程序不能實(shí)現(xiàn)互操作,兩者不能在一起協(xié)作。因?yàn)樵趏rpc(object rpc)協(xié)議中,用objref代表了一個(gè)正在運(yùn)行對(duì)象的引用;在corba/iiop(internet inter-orb protocol)中,用交換可互操作對(duì)象引用ior(interoperable object reference)代表一個(gè)服務(wù)器的對(duì)象引用。不幸的是,ior 與 objref不能夠關(guān)聯(lián)起來。然而,使用soap可以實(shí)現(xiàn)在垂直應(yīng)用層面上corba ,dcom技術(shù)的水平整合,能夠更好的集成corba,dcom為一個(gè)整體。 3.3 soap并沒有定義信息的語義,服務(wù)質(zhì)量,基于internet的事務(wù)處理。而是采用 xml 進(jìn)行消息編碼,正確的處理需要服務(wù)器和客戶端本身來執(zhí)行,理解和執(zhí)行彼此使用的信息格式(one-to-one,request/reply,broadcast,etc),應(yīng)用程序本身在語義解析中扮演著十分重要的角色。而corba,dcom表示了傳送信息的語義,對(duì)參數(shù)和返回值使用二進(jìn)制編碼。可對(duì)諸如參數(shù)名稱或類型的任何元信息都不編碼,但使中介很難處理消息。又因?yàn)槊總€(gè)系統(tǒng)使用不同的二進(jìn)制編碼,系統(tǒng)間的互操作的很難實(shí)現(xiàn)。 3.4 盡管corba可以在不同的平臺(tái)上執(zhí)行,dcom可以在微軟的各種平臺(tái)上運(yùn)行,但是基于corba和dcom的解決方案必須依賴于單一的應(yīng)用程序。比如說,假如運(yùn)行的是dcom服務(wù)器程序,所有的分布式的客戶端不得不運(yùn)行于微軟的操作平臺(tái)上。corba 雖然可以運(yùn)行于不同的平臺(tái),但corba的互操作性并沒有在更高層的服務(wù)上進(jìn)行擴(kuò)展,如安全性和事務(wù)處理,在這種情況下,許多提供的服務(wù)沒有得到很好的優(yōu)化。dcom和corba適合于服務(wù)器--服務(wù)器間的通訊,但是對(duì)于客戶端--服務(wù)器的通訊十分脆弱,尤其當(dāng)客戶程序分布在internet上更是如此。 3.5 soap不象dcom一樣試圖定義分布式系統(tǒng)的所有元素,soap沒有提供分布式類庫,類型安全檢查,版本控制等等,soap比它處于一個(gè)更低的層次,有點(diǎn)類似于iiop在corba的作用,dcom卻提供了一些額外的協(xié)議功能,是iiop 或者soap所不具備的。然而,許多. dcom的額外功能只有在服務(wù)器――服務(wù)器間通信時(shí)才會(huì)用到,對(duì)于客戶端――服務(wù)器之間的通信則是多余的。
四:soap=rpc+http+xml soap簡(jiǎn)單的理解,就是這樣的一個(gè)開放協(xié)議soap=rpc+http+xml:采用http作為底層通訊協(xié)議;rpc作為一致性的調(diào)用途徑,xml作為數(shù)據(jù)傳送的格式,允許服務(wù)提供者和服務(wù)客戶經(jīng)過防火墻在internet進(jìn)行通訊交互。rpc的描敘可能不大準(zhǔn)確,因?yàn)閟oap一開始構(gòu)思就是要實(shí)現(xiàn)平臺(tái)與環(huán)境的無關(guān)性和獨(dú)立性,每一個(gè)通過網(wǎng)絡(luò)的遠(yuǎn)程調(diào)用都可以通過soap封裝起來,包括dce(distributed computing environment ) rpc calls,com/dcom calls, corba calls, java calls,etc。 soap 使用 http 傳送 xml,盡管http 不是有效率的通訊協(xié)議,而且 xml 還需要額外的文件解析(parse),兩者使得交易的速度大大低于其它方案。但是xml 是一個(gè)開放、健全、有語義的訊息機(jī)制,而 http 是一個(gè)廣泛又能避免許多關(guān)于防火墻的問題,從而使soap得到了廣泛的應(yīng)用。但是如果效率對(duì)你來說很重要,那么你應(yīng)該多考慮其它的方式,而不要用 soap。 為了更好的理解soap,http,xml如何工作的,不妨先考慮一下com/dcom的運(yùn)行機(jī)制,dcom處理網(wǎng)絡(luò)協(xié)議的低層次的細(xì)節(jié)問題,如proxy/stub間的通訊,生命周期的管理,對(duì)象的標(biāo)識(shí)。在客戶端與服務(wù)器端進(jìn)行交互的時(shí)候,dcom采用ndr(network data representation)作為數(shù)據(jù)表示,它是低層次的與平臺(tái)無關(guān)的數(shù)據(jù)表現(xiàn)形式。 dcom是有效的,靈活的,但也是很復(fù)雜的。而soap的一個(gè)主要優(yōu)點(diǎn)就在于它的簡(jiǎn)單性,soap使用http作為網(wǎng)絡(luò)通訊協(xié)議,接受和傳送數(shù)據(jù)參數(shù)時(shí)采用xml作為數(shù)據(jù)格式,從而代替了dcom中的ndr格式,soap和 dcom執(zhí)行過程是類似的,如下圖,但是用xml取代 ndr作為編碼表現(xiàn)形式,提供了更高層次上的抽象,與平臺(tái)和環(huán)境無關(guān)。 客戶端發(fā)送請(qǐng)求時(shí),不管客戶端是什么平臺(tái)的,首先把請(qǐng)求轉(zhuǎn)換成xml格式,soap網(wǎng)關(guān)可自動(dòng)執(zhí)行這個(gè)轉(zhuǎn)換。為了保證傳送時(shí)參數(shù),方法名,返回值的唯一性,soap協(xié)議使用了一個(gè)私有標(biāo)記表,從而服務(wù)端的soap網(wǎng)關(guān)可以正確的解析,這有點(diǎn)類似于com/dcom 中的樁(stub)。轉(zhuǎn)化成xml格式后,soap終端名(遠(yuǎn)程調(diào)用方法名)及其他的一些協(xié)議標(biāo)識(shí)信息被封裝成http請(qǐng)求,然后發(fā)送給服務(wù)器。如果應(yīng)用程序要求,服務(wù)器返回一個(gè)http應(yīng)答信息給客戶端。與通常對(duì)html頁面的http get請(qǐng)求不同的是,此請(qǐng)求設(shè)置了一些http header,標(biāo)識(shí)著一個(gè)soap服務(wù)激發(fā),和http包一起傳送。例如:對(duì)于一個(gè)詢問股票價(jià)格的應(yīng)用程序,服務(wù)器端具有組件提供某股票當(dāng)前的價(jià)格,組件是com或corba在服務(wù)器上建立的。客戶端發(fā)送一個(gè)soap請(qǐng)求給服務(wù)器詢問股票價(jià)格。服務(wù)器依賴于服務(wù)器上的soap網(wǎng)關(guān),使用內(nèi)嵌的html對(duì)象調(diào)用合適的方法, 然后把得到的價(jià)格通過soap應(yīng)答傳給客戶端。 五.soap 的前景 w3c于2000年5月8日發(fā)表了simple object access protocol (soap) 1.1版本,具體規(guī)范發(fā)布在下列站點(diǎn)上(http://www.w3.org/tr/soap/)。又與今年7月9號(hào)推出了soap version 1.2版本的建議草案,具體規(guī)范發(fā)布在下列站點(diǎn)上(http://www.w3.org/tr/soap12/)。編寫soap version 1.1版本的工作小組的成員包括:developmentor, international business machines corporation, lotus development corporation, microsoft, userland software。 soap的推出是令人興奮的。可以相信,隨著網(wǎng)絡(luò)服務(wù)的的不斷發(fā)展,它將極大的改變我們的思考模式和開發(fā)模式。現(xiàn)在,已有許多大公司著手支持soap的開發(fā),去年 ibm公司 和 microsoft公司 都發(fā)行了實(shí)現(xiàn) soap 的第一批版本。 ibm 公司啟動(dòng)了apache soap 項(xiàng)目計(jì)劃,微軟最近又推出了soaptoolkit2.0的正式版,主要包括如下的一些特征:soap的高層接口和低層接口,消息對(duì)象接口,完全支持wsdl 1.1標(biāo)準(zhǔn),支持用戶自定義類型映射,并且提供了豐富和完整的開發(fā)文檔以及應(yīng)用實(shí)例。而且,兩家公司正在互操作性方面努力研究。可以樂觀的估計(jì),不用多久,soap 互操作性的時(shí)代就將來臨。 與soap相關(guān)的一些標(biāo)準(zhǔn):
http 1.0 or greater(http://www.w3.org/protocols/http/ietf-http-ext)
the core w3c xml recommendation(http://www.w3.org/tr/1998/rec-xml-19980210)
w3c xml namespace recommendation(http://www.w3.org/tr/rec-xml-names).
xml schema(http://www.w3.org/tr/xmlschema-1/)
目前支持soap的一些公司產(chǎn)品: organizationproductrogue wavenouveau orbionaorbix 2000objectspacevoyagerdigital creationszope, the python application serveruserlandfrontier groupware productmicrosoftwindows dna 2000 soap是一個(gè)協(xié)議,與編程語言無關(guān)。實(shí)際上,許多語言已經(jīng)開始支持soap,如:java,c/c++,vb,c#,perl,php.下面列出了在java/c++/perl/ada/python環(huán)境下soap的執(zhí)行工具:
java: apache soap , developmentor's implementation, idooxoap from zvon
python: pythonware (client side only)
c++: idooxoap from zvon
perl: soap::lite
ada: an ada implementation
microsoft visual studio: the microsoft soap toolkit.