国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種利用SOAP擴展在Web服務(wù)中傳輸數(shù)據(jù)的方法

2013-08-15 00:45張立人何海濤
關(guān)鍵詞:二進(jìn)制報文客戶端

邱 玲,張立人,何海濤

(四川理工學(xué)院計算機學(xué)院,四川 自貢 643000)

Web服務(wù)提供了基于HTML的Web站點以外的快速、靈活的數(shù)據(jù)獲取途徑,然而,普通的Web服務(wù)只適合傳輸能被XML高效打包的數(shù)據(jù)類型,對于一些二進(jìn)制數(shù)據(jù),例如圖形、圖像、音頻等,卻難以高效傳輸,這嚴(yán)重限制了Web服務(wù)的應(yīng)用領(lǐng)域。隨著微軟公司的SOAP擴展技術(shù)的引入[1],我們能對Web服務(wù)的全過程進(jìn)行控制,從而具有傳輸任意數(shù)據(jù)類型的可能性。

1 Web服務(wù)

1.1 Web服務(wù)技術(shù)基礎(chǔ)

Web服務(wù)作為一個跨平臺獲取數(shù)據(jù)的協(xié)議,必須屏蔽掉各種硬件平臺和操作系統(tǒng)平臺的差異。因此,Web服務(wù)必須提供以下幾個方面的功能:一種獨立于平臺的數(shù)據(jù)交換格式、一種描述數(shù)據(jù)結(jié)構(gòu)的方法、打包數(shù)據(jù)以跨越Internet傳輸?shù)臉?biāo)準(zhǔn)方法、Web服務(wù)通知客戶程序自身結(jié)構(gòu)的方法以及以編程方式定位Web服務(wù)的方法。為了實現(xiàn)這些功能,Web服務(wù)采用的技術(shù)分別是:使用XML進(jìn)行數(shù)據(jù)的表達(dá)、用XML大綱進(jìn)行數(shù)據(jù)結(jié)構(gòu)的描述、以SOAP協(xié)議來打包數(shù)據(jù)并在Internet上傳輸、利用WSDL語言描述自身、以及采用UDDI進(jìn)行定位[2-3]。

在這些基礎(chǔ)技術(shù)中,我們著重考察數(shù)據(jù)的XML表達(dá)形式。XML是純文本格式,但通過串行化和反串行化技術(shù)可以封裝二進(jìn)制數(shù)據(jù)。例如,一個整數(shù)1234,要發(fā)送出去時,串行化為文本“1234”,當(dāng)對方收到這個文本后,又進(jìn)行反串行化成為整數(shù)1234。由于文本格式對于任何平臺都是可讀的,所以XML就具有了跨平臺傳輸數(shù)據(jù)的性質(zhì)。但同時我們也注意到,串行化和反串行化是低效的,占用了大量的CPU時間,同時,用文本格式表達(dá)二進(jìn)制將使用更多的字節(jié),從而占用了更多的網(wǎng)絡(luò)帶寬。因此,這種基于串行化和反串行化的XML表達(dá)方式并不適用于復(fù)雜的數(shù)據(jù)類型。

1.2 Web服務(wù)的工作過程

Web服務(wù)的體系結(jié)構(gòu)[4]是客戶端/服務(wù)器形式,所以在工作中首先由客戶端發(fā)起請求,然后由Web服務(wù)應(yīng)答。由于這個過程是跨Internet進(jìn)行的,要求穿越防火墻,所以將請求報文和應(yīng)答報文都封裝成SOAP報文形式,以HTTP協(xié)議進(jìn)行發(fā)送,這樣Web服務(wù)的工作過程實際就是客戶端程序構(gòu)造SOAP請求報文,其中以XML的形式串行化函數(shù)調(diào)用的名稱和參數(shù),然后將其以HTTP協(xié)議發(fā)送給Web服務(wù)端;Web服務(wù)端接收到請求報文后,對參數(shù)進(jìn)行反串行化,完成函數(shù)調(diào)用,將計算結(jié)果重新串行化為XML形式,打包成SOAP應(yīng)答報文,最后用HTTP協(xié)議發(fā)送回客戶端;客戶端收到應(yīng)答報文后,對計算結(jié)果進(jìn)行反串行化,從而得到實際的返回值,Web服務(wù)的一次工作過程完成。

在這個過程中,客戶端程序只要發(fā)起了發(fā)送命令,就不能再進(jìn)行任何操作,只能等待Web服務(wù)的應(yīng)答。Web服務(wù)端同樣如此,從接收到請求報文到發(fā)送應(yīng)答報文都是Web服務(wù)器自動進(jìn)行[5]。系統(tǒng)將自動進(jìn)行相應(yīng)的串行化、反串行化、SOAP報文的構(gòu)造以及網(wǎng)絡(luò)傳輸工作。整個過程都沒有允許客戶程序和Web服務(wù)進(jìn)行更多的控制。

2 SOAP擴展

從以上討論可以看出,由于XML串行化和反串行化的低效,同時Web服務(wù)沒有允許我們對請求服務(wù)的全過程進(jìn)行深入的控制,所以對于一些特殊類型的數(shù)據(jù)我們難以通過Web服務(wù)進(jìn)行有效傳輸,例如圖形、圖像、音頻以及含有復(fù)雜數(shù)據(jù)的對象等。這樣就限制了Web服務(wù)的應(yīng)用性。為了進(jìn)行任意數(shù)據(jù)的高效傳輸,需要引入一種更深入的機制到Web服務(wù)標(biāo)準(zhǔn)中,這就是SOAP擴展。

2.1 SOAP擴展對SOAP報文的處理方法

SOAP擴展[6]的基本思想是將一個SOAP報文從發(fā)送到接收的整個過程劃分為4個階段,每個階段都允許代碼進(jìn)行攔截和干預(yù),從而控制對某些數(shù)據(jù)的串行化與否、數(shù)據(jù)的加密解密以及在SOAP報文中加入特定數(shù)據(jù)等。這4個階段及其作用是:

(1)BeforeSerialize

串行化之前階段,即對象串行化為SOAP報文之前階段。此階段攔截到的是二進(jìn)制數(shù)據(jù)。對于客戶端,這是在SOAP請求發(fā)送給Web服務(wù)之前,對于Web服務(wù),這是在對Web方法調(diào)用的響應(yīng)被返回客戶端之前。

(2)AfterSerialize

串行化之后階段,此時,對象已經(jīng)串行化為SOAP報文,但還沒有被發(fā)送出去。此階段攔截到的是文本形式的SOAP報文。對于客戶端和WEB服務(wù),情形與BeforeSerialize相同。

(3)BeforeDeserialize

反串行化之前階段,即已經(jīng)接收到一個SOAP請求和應(yīng)答報文,但還沒有進(jìn)行反串行化。此階段攔截到的報文是文本形式。對于客戶端,是從Web服務(wù)獲得響應(yīng)的時候,對于Web服務(wù),是從客戶端收到請求的時候。

(4)AfterDeserialize

反串行化之后階段,這時,已經(jīng)將接收到的SOAP報文反串行化了。此階段攔截到的報文是二進(jìn)制形式。對于客戶端和Web服務(wù),情形與BeforeDeserialize階段相同。

2.2 SOAP擴展傳輸特殊二進(jìn)制數(shù)據(jù)

這里,僅考慮高效傳輸大塊二進(jìn)制數(shù)據(jù)。SOAP擴展給了我們一種思路:既然我們想在SOAP報文中加入大塊二進(jìn)制數(shù)據(jù)而又不希望對這些數(shù)據(jù)進(jìn)行例行的串行化和反串行化,那就應(yīng)該在發(fā)送方已經(jīng)經(jīng)過串行化形成了文本形式的SOAP報文以后,而在發(fā)送出去以前,將大塊二進(jìn)制數(shù)據(jù)插入文本SOAP報文的某個位置;當(dāng)接收方收到這個文本SOAP報文后,也應(yīng)該在進(jìn)行反串行化之前從那個位置取出大塊二進(jìn)制數(shù)據(jù),并刪除以還原SOAP報文的本來面目,再進(jìn)行其他數(shù)據(jù)的反串行化。由于SOAP報文中的格式只對Web服務(wù)有效而對HTTP協(xié)議無效,所以我們插入大塊二進(jìn)制數(shù)據(jù)后不會影響SOAP報文在網(wǎng)絡(luò)上的傳輸。因此,我們只要選擇在發(fā)送方的AfterSerialize階段和接收方的BeforeDeserialize階段進(jìn)行攔截并做相應(yīng)處理即可實現(xiàn)大塊二進(jìn)制數(shù)據(jù)的傳輸。

3 實現(xiàn)舉例

首先從SoapExtension類派生出自己的擴展類,其中最重要的是重載ProcessMessage()方法。對于Web服務(wù)端,在這個方法中響應(yīng)AfterSerialize階段。下列關(guān)鍵代碼表示了在原SOAP報文的某處插入一個圖像文件:

FileStream fs=new FileStream("d:\old.jpg",

FileMode.Open,F(xiàn)ileAccess.Read);

unsafe

{

long len=fs.Length;

byte*p=(byte*)&len;

for(int j=0;j<8;j++)

tempStream.WriteByte(*(p++));

}

Copy(fs,tempStream);

fs.Close();

對于客戶程序,在ProcessMessage()方法中響應(yīng)BeforeDeserialize階段,從SOAP報文的約定字節(jié)處取出這個圖像文件。從本例可見,通過SOAP擴展的方法可以很好地實現(xiàn)二進(jìn)制數(shù)據(jù)的傳輸。

對于客戶程序,在ProcessMessage()方法中響應(yīng)BeforeDeserialize階段,從SOAP報文的約定字節(jié)處取出這個圖像文件。從本例可見,通過SOAP擴展的方法很好地實現(xiàn)了二進(jìn)制數(shù)據(jù)的傳輸。。

[1] 馮柳平.基于SOAP擴展的Web服務(wù)安全機制研究[J].北京印刷學(xué)院學(xué)報,2009,17(6):37-39.

[2] Joseph Bustos,Karli Watson.NET Web服務(wù)入門經(jīng)典[M].北京:清華大學(xué)出版社,2003.

[3] Russ Basiura,Mike Batongbacal,著.康 博,譯.ASP.NET Web服務(wù)高級編程[M].北京:清華大學(xué)出版社,2002.

[4] 曾 岫,彭 宏,左國威.基于SOAP擴展的Web服務(wù)安全模型[J].廣州航海高等??茖W(xué)校學(xué)報,2008,16(2):40-42.

[5] 李林靜,趙建偉.加強SOAP消息安全通信平臺的分析及實現(xiàn)[J].計算機與數(shù)字工程,2011,39(3):92-97.

[6] 李林靜,趙建偉.一種基于SOAP擴展的SOAP消息分析方法[J].計算機系統(tǒng)應(yīng)用,2012,21(1):152-155.

猜你喜歡
二進(jìn)制報文客戶端
基于J1939 協(xié)議多包報文的時序研究及應(yīng)用
用二進(jìn)制解一道高中數(shù)學(xué)聯(lián)賽數(shù)論題
CTCS-2級報文數(shù)據(jù)管理需求分析和實現(xiàn)
有趣的進(jìn)度
二進(jìn)制在競賽題中的應(yīng)用
如何看待傳統(tǒng)媒體新聞客戶端的“斷舍離”?
淺析反駁類報文要點
縣級臺在突發(fā)事件報道中如何應(yīng)用手機客戶端
孵化垂直頻道:新聞客戶端新策略
ATS與列車通信報文分析