SOAP協(xié)議的相關(guān)應(yīng)用和總結(jié)
前面我們對(duì)SOAP協(xié)議進(jìn)行了介紹。我們了解,并且掌握了這部分的原理知識(shí)。了解到在一些重要的應(yīng)用中,這個(gè)簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議起到了很重要的作用。這里我們主要分析一下RPC以及SOAP協(xié)議應(yīng)用等方面的內(nèi)容。
SOAP-RPC
SOAP消息本質(zhì)上是一種從發(fā)送方到接收方的單向傳輸,但是SOAP經(jīng)常組合到實(shí) 現(xiàn)請(qǐng)求/響應(yīng)機(jī)制中。要讓RPC使用SOAP,必須遵循幾條規(guī)則。首先,請(qǐng)求和響應(yīng) 消息必須被編碼成結(jié)構(gòu)類型。對(duì)一個(gè)操作的每一個(gè)輸入?yún)?shù),都必須有一個(gè)同名 元素(或輸入結(jié)構(gòu)的成員)作為參數(shù)。對(duì)每一個(gè)輸出參數(shù),都必須有一個(gè)名稱匹 配的元素(或輸出結(jié)構(gòu)的成員)。
基于RPC的觀點(diǎn),會(huì)省略一些更早一點(diǎn)顯示的SOAP消息。只帶有報(bào)文部分的SOAP請(qǐng)求與響應(yīng)封套如下所示:
請(qǐng)求 DEF響應(yīng) 22.50請(qǐng)求要調(diào)用GetLastTradePrice方法。注意響應(yīng)定義了 GetLastTradePriceResponse操作。對(duì)附加響應(yīng)到響應(yīng)操作尾部的 一個(gè)常用的SOAP調(diào)用規(guī)則是:創(chuàng)建響應(yīng)結(jié)構(gòu)。這種輸出結(jié)構(gòu)包含一個(gè)名稱為 price的元素,它返回方法調(diào)用的結(jié)果,假定為浮點(diǎn)型。
在SOAP封套中沒(méi)有什么地方的數(shù)據(jù)類型是顯式聲明的,注意到這一點(diǎn)很重要,這樣如果只查看SOAP消息,就不會(huì)知道符號(hào)類型或結(jié)果參數(shù)price(價(jià)格)的類 型。客戶端應(yīng)用程序一般通過(guò)“Section 5”編碼定義數(shù)據(jù)類型,或通過(guò)與服務(wù)器 私下達(dá)成的協(xié)議來(lái)定義數(shù)據(jù)類型。在任何一種情況下,這些包含在SOAP消息中的 定義都不是顯式的。
***,為了進(jìn)行RPC,需要一種低級(jí)協(xié)議如HTTP。盡管SOAP1.0規(guī)范強(qiáng)制要求 使用HTTP作為傳輸協(xié)議,但SOAP1.1規(guī)范(及其姊妹規(guī)范“帶有附件的SOAP消息” )允許使用FTP、SMTP、甚至(可能)原始的TCP/IP套接字。所有這些對(duì)SOAP通用的序列化和編碼規(guī)則,也適用于RPC參數(shù)。
SOAP協(xié)議應(yīng)用
Internet上某些地方的客戶端應(yīng)用程序使用Web服務(wù)。
Web服務(wù)(通過(guò)SOAP)顯示對(duì)象方法。
對(duì)象方法訪問(wèn)Web上任意位置的遠(yuǎn)程數(shù)據(jù)。
對(duì)這些網(wǎng)絡(luò)命題應(yīng)用傳遞邏輯,我們可以為Web服務(wù)和SOAP協(xié)議下一個(gè)總的結(jié)論:
某些位置的客戶端可以使Web上任意位置的數(shù)據(jù)。這就是所要證明的。
下面是更加詳細(xì)一點(diǎn)的用例。
SOAP客戶端使用UDDI注冊(cè)來(lái)查找Web服務(wù)。不用直接操作WSDL,大多數(shù)情況下SOAP應(yīng)用程序?qū)⒂策B接到使用特定類型的端口和特定樣式的綁定,并且它將 通過(guò)UDDI動(dòng)態(tài)配置要調(diào)用的、與發(fā)現(xiàn)的Web服務(wù)匹配的服務(wù)地址??蛻舳藨?yīng)用程序創(chuàng)建SOAP消息,它是一個(gè)可執(zhí)行想要的請(qǐng)求/響應(yīng)操作的 XML文檔??蛻舳税裇OAP消息傳送給監(jiān)聽(tīng)SOAP請(qǐng)求的Web服務(wù)器上的JSP或ASP頁(yè)面。 SOAP服務(wù)器解析SOAP包并在其領(lǐng)域調(diào)用合適的對(duì)象方法,在SOAP文檔中包含的參數(shù)中傳遞。在SOAP服務(wù)器接收消息之前,中間處理節(jié)點(diǎn)可以執(zhí)行SOAP報(bào) 頭指示的特殊功能,可視情況確定是否執(zhí)行這步操作。請(qǐng)求對(duì)象執(zhí)行指示的功能,并返回?cái)?shù)據(jù)給SOAP服務(wù)器,它把響應(yīng)打包到SOAP封套中。服務(wù)器把SOAP封套包裹在要發(fā)送回請(qǐng)求機(jī)器的響應(yīng)對(duì)象中,如 servlet或COM對(duì)象??蛻舳私邮諏?duì)象,剝離出SOAP封套并把響應(yīng)文檔發(fā)送給最初發(fā)出請(qǐng)求的程 序,完成請(qǐng)求/響應(yīng)循環(huán)。
小結(jié)
SOAP協(xié)議是一種基于XML的協(xié)議,它用于在分布式環(huán)境中發(fā)送消息,并執(zhí)行遠(yuǎn)程過(guò) 程調(diào)用。使用SOAP,不用考慮任何特定的傳輸協(xié)議(盡管通常選用HTTP協(xié)議), 就能使數(shù)據(jù)序列化。用SOAP來(lái)構(gòu)建平臺(tái)與語(yǔ)言中性的互操作系統(tǒng)是一個(gè)好的選擇??傊?,SOAP和 Web服務(wù)已為在XML上構(gòu)建分布式應(yīng)用程序基礎(chǔ)結(jié)構(gòu)所需的一切都考慮好了。通過(guò)解決COM和Java組件對(duì)象模型之間的沖突,SOAP把多個(gè)平臺(tái)在訪問(wèn)數(shù)據(jù)時(shí)所出現(xiàn)的 不兼容性問(wèn)題減至最少。先把這些討論放在一邊,SOAP是一種適用于所有類型的對(duì)象實(shí)體的理想的媒介 即使對(duì)于像Brad Pitt和Edward Norton之類的好萊塢電影角色也可用作 一種通信媒介。就像在電影中一樣,期待著這種新技術(shù)帶來(lái)震撼世界的效果。