国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

淺談SOAP (轉(zhuǎn))

2024-07-21 02:21:27
字體:
供稿:網(wǎng)友
2001 年 8 月
本文對(duì)soap作了一個(gè)初步介紹,給出幾個(gè)簡(jiǎn)單示例;接著比較corba,dcom/com與soap的聯(lián)系與區(qū)別;然后淺析soap簡(jiǎn)單的理解為rpc+http+xml時(shí)的運(yùn)行機(jī)制;最后展現(xiàn)soap的前景。

一:為什么需要soap?
隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,現(xiàn)代企業(yè)面臨的環(huán)境越來越復(fù)雜,其信息系統(tǒng)大多數(shù)為多平臺(tái)、多系統(tǒng)的復(fù)雜系統(tǒng)。這就要求今天的企業(yè)解決方案具有廣泛的兼容能力,可以支持不同的系統(tǒng)平臺(tái)、數(shù)據(jù)格式和多種連接方式,要求在internet 環(huán)境下,實(shí)現(xiàn)系統(tǒng)是松散耦合的、跨平臺(tái)的,與語言無關(guān)的,與特定接口無關(guān)的,而且要提供對(duì)web 應(yīng)用程序的可靠訪問。
隨著異種計(jì)算環(huán)境的不斷增加,各種系統(tǒng)間的互操作性就愈顯得必要,要求系統(tǒng)能夠無縫地進(jìn)行通信和共享數(shù)據(jù),從而在 internet 環(huán)境下,消除巨大的信息孤島,實(shí)現(xiàn)信息共享、進(jìn)行數(shù)據(jù)交換,達(dá)到信息的一致性。web services 希望實(shí)現(xiàn)不同的系統(tǒng)之間能夠用"軟件-軟件對(duì)話"的方式相互調(diào)用,打破了軟件應(yīng)用、網(wǎng)站和各種設(shè)備之間的格格不入的狀態(tài),實(shí)現(xiàn)"基于web無縫集成"的目標(biāo)。
今年四月份的時(shí)候,w3c聯(lián)盟召開了第一次 web 服務(wù)專題研討會(huì),目的為探索 w3c 應(yīng)向哪個(gè)方向發(fā)展才能實(shí)現(xiàn)新興的 web 服務(wù)架構(gòu)的標(biāo)準(zhǔn)化,期間提出了一個(gè)"web 服務(wù)堆棧"的構(gòu)想,如下圖,從圖中可以看出,soap在web服務(wù)堆棧中作為用于 xml 消息傳遞的一種非常普遍的協(xié)議,發(fā)揮著十分重要的作用。

二:什么是soap?
soap(simple object access protocol )簡(jiǎn)單對(duì)象訪問協(xié)議是在分散或分布式的環(huán)境中交換信息的簡(jiǎn)單的協(xié)議,是一個(gè)基于xml的協(xié)議,它包括四個(gè)部分:soap封裝(envelop),封裝定義了一個(gè)描述消息中的內(nèi)容是什么,是誰發(fā)送的,誰應(yīng)當(dāng)接受并處理它以及如何處理它們的框架;soap編碼規(guī)則(encoding rules),用于表示應(yīng)用程序需要使用的數(shù)據(jù)類型的實(shí)例; soap rpc表示(rpc representation),表示遠(yuǎn)程過程調(diào)用和應(yīng)答的協(xié)定;soap綁定(binding),使用底層協(xié)議交換信息。
雖然這四個(gè)部分都作為soap的一部分,作為一個(gè)整體定義的,但他們?cè)诠δ苌鲜窍嘟坏摹⒈舜霜?dú)立的。特別的,信封和編碼規(guī)則是被定義在不同的xml命名空間(namespace)中,這樣使得定義更加簡(jiǎn)單。
soap的兩個(gè)主要設(shè)計(jì)目標(biāo)是簡(jiǎn)單性和可擴(kuò)展性。這就意味著有一些傳統(tǒng)消息系統(tǒng)或分布式對(duì)象系統(tǒng)中的某些性質(zhì)將不是soap規(guī)范的一部分。比如:分布式垃圾收集 (distributed garbage collection)、成批傳送消息(boxcarring or batching of messages)、對(duì)象引用 (objects-by-reference(which requires distributed garbage collection))、對(duì)象激活 (activation(which requires objects-by-reference))。
soap消息舉例:
1.第一個(gè)例子闡明了soap中一個(gè)簡(jiǎn)單的通信信息,包括了兩個(gè)不是soap定義而是應(yīng)用程序定義的元素:頭塊元素alertcontrol 和體塊元素alert。頭塊元素包括兩個(gè)參數(shù):priority 和expires。體塊元素包括的是實(shí)際傳送的信息。

(example 1)
2.soap通信與底層的不同協(xié)議和不同的交換格式有關(guān),下面的例子soap使用http作為底層通信協(xié)議,從而可以很好的使用request/response機(jī)制來傳送信息。 soap/http請(qǐng)求包括一個(gè)getlasttradeprice的塊元素,該請(qǐng)求攜帶一個(gè)字符串參數(shù)和ticker符號(hào),在soap應(yīng)答中返回一個(gè)浮點(diǎn)數(shù)。xml名域用來區(qū)分soap標(biāo)志符和應(yīng)用程序特定的標(biāo)志符。

(example 2)
3. 例3 展示的是stockquote soap服務(wù)信息,是對(duì)例2的請(qǐng)求作出的一條應(yīng)答消息。

(example 3)
三:soap與corba,com/dcom的區(qū)別?
在soap剛剛提出來的時(shí)候,許多人就提出了疑問:soap與corba和dcom的區(qū)別何在?
  1. corba(common object request broker architecture)公共對(duì)象請(qǐng)求代理體系結(jié)構(gòu)是由omg組織制訂的一種標(biāo)準(zhǔn)的面向?qū)ο髴?yīng)用程序體系規(guī)范。由對(duì)象請(qǐng)求代理orb、對(duì)象服務(wù)、公共設(shè)施、域接口和應(yīng)用接口這幾個(gè)部分組成。其核心部分是對(duì)象請(qǐng)求代理orb(object request broker)。orb提供了一種機(jī)制,通過這種機(jī)制,對(duì)象可以透明的發(fā)出請(qǐng)求和接收響應(yīng)。分布的、可以互操作的對(duì)象可以利用orb構(gòu)造可以互操作的應(yīng)用。orb可看作是在對(duì)象之間建立客戶/服務(wù)關(guān)系的一種中間件。基于orb,客戶可以透明的調(diào)用服務(wù)對(duì)象提供的方法,該服務(wù)對(duì)象可以與客戶運(yùn)行在同一臺(tái)機(jī)器上,也可以運(yùn)行在其他機(jī)器上通過網(wǎng)絡(luò)與客戶進(jìn)行交互。orb截取客戶發(fā)送的請(qǐng)求,并負(fù)責(zé)在該軟件總線上找到實(shí)現(xiàn)該請(qǐng)求的服務(wù)對(duì)象,然后完成參數(shù)、方法調(diào)用,并返回最終結(jié)果。corba 1.1 由對(duì)象管理組織在 1991 年發(fā)布。定義了接口定義語言(idl)和應(yīng)用編程接口(api),從而通過實(shí)現(xiàn)對(duì)象請(qǐng)求代理(orb)來激活客戶/服務(wù)器的交互。corba 2.0 于 1994 年的 12 月發(fā)布定義了如何跨越不同的 orb 提供者而進(jìn)行通訊。
  2. 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)用程序。
  3. 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):
  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的一些公司產(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í)行工具:
  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聯(lián)盟)
  4. http://www.soaprpc.com/
  5. http://www.webservices.org
  6. http://www.soapwebservices.com
  7. http://www.xml.org.cn(中國xml聯(lián)盟)
鑒于soap是當(dāng)前的新技術(shù),國內(nèi)資料貧乏,主要參考了國外的一些資料及ibm和microsoft的相關(guān)資料,文章偏頗之處,請(qǐng)多指教!
作者介紹
段智華: 高級(jí)軟件工程師,對(duì)工作流系統(tǒng)有深入研究,曾參與基于xml的su-pdm2.0產(chǎn)品數(shù)據(jù)管理系統(tǒng)的開發(fā)。目前在上海市易方公司從事soap/xml的研究。可通過e-mail:[email protected]與作者聯(lián)系。
原文地址:http://www-900.ibm.com/developerworks/xml/x-sisoap/index.shtml

商業(yè)源碼熱門下載www.html.org.cn

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 弋阳县| 常州市| 伊通| 腾冲县| 辛集市| 玉环县| 阆中市| 台南县| 岳西县| 霍州市| 淮南市| 余干县| 辽中县| 滦南县| 托里县| 台东县| 兴国县| 新晃| 佳木斯市| 兰坪| 鄢陵县| 精河县| 平远县| 贵南县| 镶黄旗| 紫金县| 重庆市| 大丰市| 益阳市| 博客| 牡丹江市| 明水县| 定安县| 浠水县| 寻乌县| 吴忠市| 金川县| 五寨县| 沭阳县| 西峡县| 瓮安县|