曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
被寫過,分裂函數創建一個數組,使用“ #”作為分隔。這是因為在R P C調用期間當B o o k R e c o r d
被創建時,書籍標題同它的作者被“ #”號所隔開。因此,當分裂函數創建數組時,第一個元素
將總是保持書籍的標題,剩下的元素將是書籍作者。
程序清單11 - 4 8
如果沒有相關的書籍,那么將給出一個提示消息,記錄集資源將被釋放。
程序清單11 - 4 9
3. 目錄的更新
這種分布式系統的一個重要表現是它有能力從中心服務器更新條目,并獨立于任何正在運
456使用XML 高級編程
下載
行的分布服務器。更新條目的H T M L界面如下所示。在下載的例子文件為A d d N e w. a s p文件(參
見圖11 - 1 8)。
在這個部分,你將必須作為一名允許寫文件的用戶被登錄,因為你將直接更新X M L文件。
一種方法是進行響應鑒定和對于客戶目錄的匿名用戶失效。你能在IIS Management
Console中通過右擊客戶目錄和選擇特性做到這些。然后,選擇Directory Securing(目錄安
全)標記并點擊E d i t(編輯)鍵,保證Allow Anonymous Access(允許匿名登錄)不被選
擇,而Windows NT Challenge/Response被選中。
圖11-18
圖11 - 1 9顯示目錄更新是如何工作的:
圖11-19
被稱作A d d N e w. a s p的文件包含以上的H T M L和實現X M L - R P C所需要的腳本。我們想激活的
第11章服服務器到服務器使用457 下載
AddNew.asp
使用者錄入適當的
書籍信息,并點擊
“Add Book”按鈕
Bookserver.asp
用新的書籍更新本地
XML數據文件
XML-RPC調用
加入新的書箱
X M L - R P C方法有如下接口(參見表11 - 2)。
表11 - 2
方法名稱參數
AddNewBook( ) c i t y—城市名字
P u b D a t e—出版日期
Ti t l e—書籍標題
A u t h o r s—書籍作者列表
S u b j e c t—書籍的主題領域
在客戶頁, A d d N e w. a s p以常用的PRC include文件和H T M L報頭開始:
程序清單11 - 5 0
然后從上面的網頁檢查是否有一個作者被提交(它對一本書總是需要的)。如果有,就對每
一個提交的值設立參數數組:
程序清單11 - 5 1
既然對方法已定義了參數,就能對X M L - R P C使用C O M對象來激活它。該X M L - R P C將返回
一個已經被加入的書的新I D(關于XML-RPC COM工具的更多信息將在“到哪里去”一部分給
出)。通過創建x m l r p c C l i e n t對象的實例并向A d d N e w B o o k()方法傳送參數得以實現。然后客戶
得到了已經加入的新書的I D。
作為一個練習,你可能希望嘗試和擴展該功能,即從B o o k S e r v e r. a s p文件里使用一個X M L -
RPC調用從書庫得到一個新的ID,而不是從本地XML文件中得到ID。
程序清單11 - 5 2
458使用XML 高級編程
下載
最后是一個實際使用的用于更新書籍所需要的程序段,可輸入城市、出版日期、書籍標題、
作者和書籍主題。A d d B o o k()方法作為一個隱藏元素引入。
程序清單11 - 5 3
4. Wr o x書籍服務器
在該應用中我們仍然沒有處理的部分是由B o o k S e r v e r. a s p所支持的服務器的實現。這是在
I n t e r n e t上工作所使用的X M L - R P C實現工具的典型范例。不需要直接訪問服務器代碼,但是提供
一個界面標準和語義。這一部分對于理解R P C應用程序的另一側是非常有用的。如果你自己寫
R P C服務器應用程序,那么它也會有特別的幫助。
應用程序的這一部分就是實現我們已經在前面的程序中調用的遠程方法。
在X M L - R P C的A S P版本里,盡管調用過程r p c s e r v e r()來激活X M L服務器,客戶和服務器
的執行工具有相同的i n c l u d e文件報頭部分對于所有X M L - R P C服務器的實現都是需要的——它是
一個簡單的使用數據對服務器的初始化,這些數據都是通過X M L - R P C調用從客戶處P O S T的。
第11章服服務器到服務器使用459 下載
程序清單11 - 5 4
除了早些看到的V B A r r a y函數,服務器的剩余部分都使用J a v a S c r i p t實現。
程序清單11 - 5 5
第一個函數是對于特定的城市得到一個相關主題。創建一個MSXML DOM對象的實例并打
開該城市的X M L文件,然后使用g e t E l e m e n t s B y Ta g N a m e ( )方法得到N o d e L i s t對象,并創建一個
相關主題的一維數組(它是書籍元素的第三個子結點)。
程序清單11 - 5 6
當集中了所有主題,我們想有一個方法來得到特定城市中被選主題的所有書籍,G e t B o o k s()
函數將做此工作,同樣也裝載該相關城市的X M L庫。
程序清單11 - 5 7
460使用XML 高級編程
下載
然后,在一個N o d e l i s t對象里得到所有< b o o k >元素,并遍歷每一個元素,檢查書籍的主題類
型(書籍元素的第三個子結點)是否與從客戶發送的一樣。如果有一個主題匹配,那么該書的
標題被加入,成為一個數組的第一個元素。重復遍歷每一個< a u t h o r s >元素(< b o o k >元素的第二
個子結點),每一個< a u t h o r s >元素可能有多個< a u t h o r >子結點。每個作者被加到數組的第二個元
素;該數組就是剛剛將書籍標題加入的那一個,其中每本書的作者被“ #”隔開,下一本書被加
到數組的下一元素等等,以以下形式直至結束。
實現該功能的代碼如下:
程序清單11 - 5 8
如果對于特定城市無相關標題,那么將簡單地返回文本“ no titles”(無標題)。
第11章服服務器到服務器使用461 下載
程序清單11 - 5 9
為了更新城市的X M L書庫,我們將調用A d d N e w B o o k()方法,它將把新書標題、一個作
者的數組和書籍的主題作為數據加入。我們創建一個MXSML DOM的實例, 并用
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(143)