曝光臺(tái) 注意防騙
網(wǎng)曝天貓店富美金盛家居專營(yíng)店坑蒙拐騙欺詐消費(fèi)者
S O A P,并且它們都能夠使用帶有“ t e x t / x m l”內(nèi)容類型的動(dòng)詞P O S T。防火墻通過(guò)迫使
SOAP使用強(qiáng)制性方法以至WebDAV請(qǐng)求被完全阻止。
S O A P的0 . 9版本使用“t e x t / x m l - S O A P”內(nèi)容類型來(lái)解決這個(gè)混淆,但是這已經(jīng)很少提及。
第11章服服務(wù)器到服務(wù)器使用477 下載
作為一個(gè)有用的分辨器,我認(rèn)為它將成為最終正確的選擇,因?yàn)閷?duì)內(nèi)容類型的提出并不
是隨意的。0 . 9版本也有另一個(gè)解決方案,它對(duì)S O A P請(qǐng)求報(bào)頭進(jìn)行限制。它可能成為一個(gè)
對(duì)X M L - R P C愛(ài)好者的讓步。即允許一個(gè)S O A P請(qǐng)求與一個(gè)簡(jiǎn)單的P O S T一樣,在起始部分
什么也沒(méi)有。但是如我所說(shuō),這將無(wú)法分辨一個(gè)請(qǐng)求是否為SOAP請(qǐng)求。
11.4.2 實(shí)現(xiàn)
我們將關(guān)注S O A P實(shí)現(xiàn)中較X M L - R P C的高明之處。現(xiàn)在,不再孤立地定義S O A P規(guī)范,將逐
步建立了一個(gè)S O A P客戶和服務(wù)器。在這個(gè)過(guò)程中,將介紹該標(biāo)準(zhǔn)中的一些關(guān)鍵點(diǎn)。
這一節(jié)的代碼包括在網(wǎng)上本書(shū)的可下載代碼部分。
模塊結(jié)構(gòu)
有兩個(gè)我們必需建立的模塊—一個(gè)用于客戶系統(tǒng),另一個(gè)用于服務(wù)器系統(tǒng)。因?yàn)橛心承?br />
函數(shù)同時(shí)在客戶和服務(wù)器上執(zhí)行—例如建立有效載荷—那么我們也需要?jiǎng)?chuàng)建一個(gè)普通處理
模塊。
(1) 客戶模塊
我們將從顯示一個(gè)調(diào)用的代碼開(kāi)始。盡管遠(yuǎn)程調(diào)用的思想是在另一個(gè)服務(wù)器上執(zhí)行一個(gè)函
數(shù),我們?nèi)韵MM可能地像一個(gè)正常的功能調(diào)用那樣實(shí)現(xiàn)遠(yuǎn)程調(diào)用。例如,一個(gè)用來(lái)在數(shù)據(jù)庫(kù)
里得到第一個(gè)作者的名字本地調(diào)用可能有如下形式:
程序清單11 - 9 5
那么我們希望遠(yuǎn)程調(diào)用有如下的形式:
如果你使用某種語(yǔ)言如C或者C + +(請(qǐng)參見(jiàn)本章后面部分的C + +實(shí)現(xiàn)例子)來(lái)實(shí)現(xiàn)S O A P客戶
和服務(wù)器,那么將很容易通過(guò)參數(shù)數(shù)量的變化來(lái)處理調(diào)用。但是,我們將演示用A S P來(lái)建立一個(gè)
S O A P實(shí)現(xiàn)工具,因此僅能夠傳送預(yù)先給定數(shù)量的參數(shù)。為了避免該種限制,我們總是傳送一個(gè)
參數(shù),它是一個(gè)數(shù)組。該數(shù)組將包含真實(shí)的參數(shù)。這樣,參數(shù)的多少就可如你所愿。
一個(gè)客戶請(qǐng)求的例子如下:
程序清單11 - 9 6
478使用XML 高級(jí)編程
下載
在這個(gè)例子里我們向遠(yuǎn)程過(guò)程( g e t A u t h o r)傳送兩個(gè)參數(shù)。從該調(diào)用的任何返回值將放在
變量o R e t里,任何成功或失敗的狀態(tài)信息將放在變量i R e t里。該遠(yuǎn)程過(guò)程被函數(shù)S O A P()激活,
如果你正在實(shí)現(xiàn)自己的系統(tǒng),那么能夠使用任何你認(rèn)為有意義的名字。
在遠(yuǎn)程服務(wù)器上這個(gè)過(guò)程做了些什么呢?它返回了一批作者名,他們的I D都是大于或等于
第一個(gè)參數(shù)的。在這個(gè)例子里,該參數(shù)的值來(lái)自于一個(gè)可變的表單。至于確切地返回作者的數(shù)
量,將通過(guò)第二個(gè)參數(shù)設(shè)置—在這里用“1”。這個(gè)程序?qū)⒃诤竺姹挥玫健?br />
你可能注意到這里有兩個(gè)i n c l u d e文件,并想知道為什么我們不包含S O A P C l i e n t . a s p中的
基本模塊S O A P. a s p,這樣就而只需要包含一個(gè)。在絕大多數(shù)情況可以這樣做,但是,后
面我將向你展示這樣一種情形,即我們想建立一個(gè)既是客戶又是服務(wù)器的應(yīng)用程序。在
這種情況下,將使基本模塊被包含兩次。因此,最好將此模塊獨(dú)立于客戶和服務(wù)器模塊
之外,是否包含,依需要而定。當(dāng)然,如果你使用的是一個(gè)比A S P更高級(jí)的環(huán)境,那么
你能使用條件包含來(lái)避免這個(gè)問(wèn)題。
(2) 調(diào)用
讓我們看一看當(dāng)執(zhí)行調(diào)用時(shí)發(fā)生了什么。下面這段代碼在S O A P C l i e n t . a s p內(nèi):
程序清單11 - 9 7
該調(diào)用被傳送到另一個(gè)函數(shù)—d oCall( )—它做實(shí)際的處理過(guò)程。SOAP( )過(guò)程必須包含
它自己,讓調(diào)用者知道處理是成功還是失敗。
那么遠(yuǎn)程調(diào)用實(shí)際做了什么呢?這是一個(gè)過(guò)程的開(kāi)始,如你所見(jiàn),首先的任務(wù)是準(zhǔn)備一個(gè)
調(diào)用的有效載荷:
程序清單11 - 9 8
第11章服服務(wù)器到服務(wù)器使用479 下載
(3) 有效載荷
創(chuàng)建一個(gè)有效載荷是在客戶和服務(wù)器雙方都需要做的工作,因此,有效載荷函數(shù)存在于通
用模塊—S O A P. a s p內(nèi)。
像使用X M L - R P C,有效載荷由一些實(shí)際的數(shù)據(jù)組成,這些數(shù)據(jù)是我們將要傳送的。它們被
包含在一個(gè)非常嚴(yán)格的消息包里以保證這些數(shù)據(jù)能夠被正確地抽取。有效載荷的實(shí)際格式隨著
對(duì)有效載荷的不同請(qǐng)求情況而不同。例如,承擔(dān)一個(gè)方法調(diào)用消息的有效載荷與傳送調(diào)用結(jié)果
的有效載荷不同。S O A P為調(diào)用、返回和錯(cuò)誤報(bào)告提供不同的有效載荷。
盡管有三種形式的有效載荷,但它們還是有一些共同的特征:
• 它們都包含于叫做< E n v e l o p e>的元素。這個(gè)元素必須屬于S O A P命名空間。
• <E n v e l o p e>元素順序包含一個(gè)< B o d y>元素,它也是在S O A P命名空間內(nèi)。這些條件意
味著總是有如下這種模式:
程序清單11 - 9 9
現(xiàn)在能夠編碼有效載荷函數(shù),它包含任何已經(jīng)定義過(guò)的子元素,不論是一個(gè)調(diào)用、一個(gè)響
應(yīng)或是一個(gè)錯(cuò)誤:
程序清單11 - 1 0 0
480使用XML 高級(jí)編程
下載
注意<E n v e l o p e>元素也包含對(duì)于數(shù)據(jù)類型的命名空間定義,像早些時(shí)候討論的那樣。正常
情況下,僅需要加入x s d命名空間,但作為一個(gè)過(guò)渡性的方法,也為X M L - D R加了命名空間,因
此能從Microsoft XML DO M(在第7章有全面的解釋)得到分類的數(shù)據(jù)。這個(gè)元素可以包含任意
數(shù)量的命名空間定義,只要你想要。并且它也包含另外的屬性,這些屬性也滿足命名空間的要
求。
我們已經(jīng)有了創(chuàng)建一個(gè)有效載荷的函數(shù),該有效載荷又是包含了任意子元素的,因此需要
一個(gè)一般過(guò)程來(lái)創(chuàng)建那些子元素。一個(gè)用于調(diào)用,一個(gè)用于對(duì)調(diào)用的響應(yīng),一個(gè)用于錯(cuò)誤指示。
(4) 方法調(diào)用和響應(yīng)
調(diào)用和它們的響應(yīng)使用方法的名字,該名字位于傳輸?shù)拿臻g。響應(yīng)將“ R e s p o n s e”附
加到方法的名字上,因此我們可有如下調(diào)用:
程序清單11 - 1 0 1
得到響應(yīng)如下:
程序清單11 - 1 0 2
中國(guó)航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級(jí)編程上(149)