曝光臺 注意防騙
網(wǎng)曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
的記錄集,該函數(shù)涉及到支持文檔,篇幅很長。這里只展示該例程的一部分。
被傳送的參數(shù)是將要加入的節(jié)點,包括新節(jié)點的名字和將轉(zhuǎn)換成節(jié)點的實際條目。如果節(jié)
點名字為空,那么使用被傳送的條目類型作為元素名字:
程序清單11 - 111
下面是創(chuàng)建包含數(shù)據(jù)的節(jié)點。注意如果我們有一個變量數(shù)組,那么我們A r r a y o f語法:
程序清單11 - 11 2
依照數(shù)據(jù)類型,正確設(shè)置新的元素:
程序清單11 - 11 3
將一個記錄集作為一個參數(shù)的能力使之成為一個功能較強的函數(shù)。注意對于每一個領(lǐng)域都
第11章服服務(wù)器到服務(wù)器使用485 下載
遞歸調(diào)用a d d C h i l d(),于是得到了條目的正確數(shù)據(jù)類型。它的另一項功能是,通過它也能處理
嵌套的記錄集:
程序清單11 - 11 4
最后,不匹配的只有參數(shù)數(shù)組,或不可識別的形式。如果是一個數(shù)組,我們將把它看作成
一個變量數(shù)組:
程序清單11 - 11 5
有效載荷功能的最后部分是低層次的例程,它對一個特定數(shù)據(jù)類型設(shè)置了一個節(jié)點:
程序清單11 - 11 6
486使用XML 高級編程
下載
為了運用Microsoft XML DOM中的X M L - D M工具,我在n o d e Ty p e d Va l u e屬性內(nèi)放了一個值,
同時也設(shè)置了x s d : t y p e值作為X M L模式第二部分的請求。我猜想,當(dāng)M i c r o s o f t發(fā)布下一個X M L
D O M版本時,d t : d t語法將被x s d : t y p e語法所取代。在這種語法里,函數(shù)的第一行可以不要。
(8) 有效載荷的提交
已經(jīng)闡明了如何建立一個有效載荷,現(xiàn)在回到所關(guān)注的遠(yuǎn)程調(diào)用上來。為了不用來回翻看,
現(xiàn)把代碼寫在下面:
程序清單11 - 11 7
如果成功調(diào)用了有效載荷,那現(xiàn)在將把有效載荷發(fā)送到遠(yuǎn)程服務(wù)器上。記住我們在S O A P
的增強功能敘述里討論過,必須在進(jìn)行M - P O S T之前先試一個P O S T。下面是代碼的開始部
分:
程序清單11 - 11 8
如果你正在寫自己的S O A P模塊,那么記住S O A P標(biāo)準(zhǔn)列出了一些必須被處理的H T T P返回代
碼。例如,重定向代碼3 0 2必須被實現(xiàn)。處理H T T P請求的一些組件將為你做這些工作,但是對
它進(jìn)行一下檢查是有必要的。
在執(zhí)行了一個P O S T后(或M - P O S T),可以檢查返回值。如果收到2 0 0,那么至少知道H T T P
處理了調(diào)用—盡管在S O A P的層次上仍可能有一些錯誤。除了2 0 0外的任何值都表示出錯,最
有可能的錯誤代碼是5 0 1—沒有執(zhí)行或者5 1 0—沒有擴(kuò)展:
第11章服服務(wù)器到服務(wù)器使用487 下載
程序清單11 - 11 9
實現(xiàn)P O S T或M - P O S T的函數(shù)如下:
程序清單11 - 1 2 0
如果被實現(xiàn)的P O S T類型是強制性的—一個M - P O S T—那么要保證出現(xiàn)所有的報頭。
需要去做的任務(wù)僅剩下檢查返回的數(shù)據(jù),這是在S O A P函數(shù)的頂層。C h e c k P a y l o a d()函數(shù)
用于檢查一個有效載荷,來確定在報頭和有效載荷中的方法名是否一致,并確定命名空間是正
確的等等。這個函數(shù)在客戶端也用于檢查從一個調(diào)用返回的有效載荷,而在服務(wù)器端用于檢查
激活一個調(diào)用的有效載荷。該函數(shù)返回在S O A P里的重要節(jié)點,或者在D O M參數(shù)里的一個錯誤
結(jié)構(gòu):
程序清單11 - 1 2 1
注意,選擇開始于根節(jié)點,這是因為在這里要處理兩種情況:一是當(dāng)實際的根節(jié)點是一個
488使用XML 高級編程
下載
< S O A P : F a u l t >元素,如果遠(yuǎn)程服務(wù)器返回一個< S O A P : F a u l t >和C h e c k P a y l o a d(),就是這種情形。
二是如果在返回的有效載荷里有錯誤,在這處情況下,將從C h e c k P a y l o a d()得到一個錯誤的
有效載荷。此時,根元素將是< S O A P : E n v e l o p e >。如果發(fā)現(xiàn)了一個< S O A P : F a u l t >元素,那么將
找出錯誤代碼和另外的信息,并把它顯示出來:
程序清單11 - 1 2 2
如果一切O K,那么將使用X M LTo Va l u e()把返回的X M L轉(zhuǎn)變成普通變量—a d d C h i l d()
函數(shù)的反轉(zhuǎn)功能是很有效的:
程序清單11 - 1 2 3
(9) 服務(wù)器模塊
現(xiàn)在我們開始構(gòu)建服務(wù)器端。第一個要做是創(chuàng)建一個XML DOM對象,并用提交已給我們發(fā)
送的數(shù)據(jù)來裝載它:
程序清單11 - 1 2 4
下一個得到的是調(diào)用者使用的方法。如果它是一個M - P O S T,那么我們需要得到M a n報頭,
它包含了命名空間用以區(qū)別強制性報頭,如果在命名空間兩邊有引用的話,那么要把它們刪除:
程序清單11 - 1 2 5
我們將檢查命名空間是否與在S O A P標(biāo)準(zhǔn)里的定義相同,但在此時,什么也沒有做:
第11章服服務(wù)器到服務(wù)器使用489 下載
程序清單11 - 1 2 6
實際的命名空間標(biāo)識符—與X M L里的前綴相似—以“n s =”打頭,一旦其被重新得到,
就能創(chuàng)建報頭名字,進(jìn)而我們能夠得到方法的名字:
程序清單11 - 1 2 7
有了方法的名字,我們需要將命名空間分開;因為需要將它與有效載荷的命名空間值核對:
程序清單11 - 1 2 8
下面這個片斷并不是S O A P標(biāo)準(zhǔn)的一部分,但是用于檢測目的的有用的代碼片斷。當(dāng)方法是
E C H O()并且命名空間是S O A P時,它所做的就是返給用戶一個實際傳送的內(nèi)容:
程序清單11 - 1 2 9
在確定執(zhí)行需要的函數(shù)之前,需要檢查有效載荷的一致性:
程序清單11 - 1 3 0
490使用XML 高級編程
下載
如果有效載荷O K,在傳送它們到回調(diào)例程之前, o X M L將包含參數(shù)節(jié)點,并把它們轉(zhuǎn)換成
變量:
程序清單11 - 1 3 1
如果調(diào)用成功執(zhí)行,那么將創(chuàng)建一個響應(yīng)有效載荷,并且它將被返回到調(diào)用者。另一方面,
如果有錯誤,那么創(chuàng)建一個錯誤有效包:
程序清單11 - 1 3 2
最后將被執(zhí)行的是一系列的實際的例程。回憶一下我們已經(jīng)創(chuàng)建的調(diào)用:
程序清單11 - 1 3 3
現(xiàn)在,需要創(chuàng)建m y S e r v e r. a s p模塊, S O A P服務(wù)器模塊需要包含進(jìn)來以使我們有權(quán)使用所有
中國航空網(wǎng) m.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(151)