曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
交到服務器腳本和網關的應用程序,因此,他們絕大多數都能使用這些有力的技術實現所需的
代碼。
在這一部分,我們將關注對X M L - R P C的一些改進,它們中的一些被提議稱為簡單對象訪問
協議(Simple Object Access Protocol, SOAP)。首先,我們將關注什么是S O A P和它形成的理由,
這一點與X M L - R P C的某些缺點的定位有關。隨后,將看到使用A S P描述S O A P的簡單工具—
盡管與你在X M L - R P C看到的風格一樣,但一個S O A P界面能使用任何語言來寫。最后,將就
S O A P所能解決的問題范圍和不能解決問題的范圍進行討論。
我們將遵循S O A P的最新標準,它來自于h t t p : / / m s d n . m i c r o s o f t . c o m / x m l / g e n e r a l / s o a p s p e c - v 1 . a s p。
請注意,許多文章,包括在M i c r o s o f t站點的一篇仍然參考0 . 9版,但是該版本與新版本有很
大的不同。
11.4.1 XML-RPC++
最初,遠程過程調用是通過H T T P的—使用X M L來定義那些調用—其靈活而功能強大,
因為它建立在兩個廣泛使用的標準之上。本書將使你相信—只要你需要—X M L作為標準之
第11章服服務器到服務器使用465 下載
一,功能是非常強大的,因為它能在許多系統里存儲或傳送、接收數據。就標準的通用性而言,
H T T P無疑是該領域的鼻祖。現在,幾乎沒有平臺不使用針對該協議的服務器軟件。
對于X M L - R P C的局限性的討論與它的構筑基礎的一些概念無關,這點我們11 0 %的確信。更
深入地對這些概念的實現進行分析,我們將看到需要比X M L - R P C更進一步。我們需要X M L -
R P C + +,我們需要S O A P。
當然,你將注意到我們并不是只做了如S t r o u s t r o p對C + +的原始定義中所描述的“++”
的工作。
那么, X M L - R P C在什么地方需要改進呢?第一個方面—盡管包含的范圍很廣—與在
X M L - R P C里消息被標記的方式有關,因此,我們將從關注X M L - R P C處理數據的復雜開始,并
考察S O A P是如何定位的。第二個方面與控制有關,將關注管理者如何管理什么能和什么不能被
傳送入他所管理的系統,因此,當關注完數據問題之后,我們將繼續考慮X M L - R P C的“全部或
沒有”的問題是如何去解決的。
你可能會問既然S O A P如此之好,可為什么不將X M L - R P C完全淘汰呢?原因是盡管X M L -
R P C只存在于一個較短的時間,但它已經吸引了大量的愛好者。全球的程序員都與D a v e
Wi n e r的U s e r l a n d的例子交互,這些例子是使用X M L - R P C的。并且,正如你在這一部分看
到的,XML-RPC在實現上比SOAP簡單,因此,它可能要存在一個較長的時間。
但是,如果某些人不能為他們的平臺找到或建立一個S O A P模塊,那么我將極力建議構造
一個僅使用X M L - R P C的新R P C系統。行業化的應用程序不可能使用X M L - R P C—盡管它
有許多愛好者。M i c r o s o f t是設計S O A P的關鍵,也非常熱衷于推出它。不久,它可能將使
其他一些服務器到服務器的技術黯然失色。
1. 數據
在數據傳送問題上, X M L - R P C的主要薄弱環節是冗長和數據類型。首先,我們將關注在
X M L - R P C里需要傳送消息的數量,然后注意數據被分類的方式——通過這種辦法,將看到整型
和字符串型在數據傳送上的不同。然后,關注S O A P是如何允許復雜結構和數組被傳送的。最后,
我們對S O A P不同于X M L - R P C的特點加以總結。
(1) 冗長
字典里對冗長的定義是:
冗長—過于詳細的說明;使用了許多不需要的詞語; 嗦;詞不達意等。
它詳細說明了這個X M L - R P C問題,要注意利用X M L - R P C進行消息傳送的核心是內容不應
被遺失,即使是使用另外一套(更小的)符號集。
像你在前幾段看到的那樣,在X M L - R P C里,每個值被一個<Va l u e>元素定義。該元素里又
存在另一個元素,這個元素指明該數據類型,接下來是它本身的值,例如:
程序清單11 - 6 8
466使用XML 高級編程
下載
在這里有兩個問題,第一個是從X M L的角度去考察,數據是沒有類型的。只是簡單地由一
個元素包含另一個元素,而這個元素又依次包含一個字符串,事實是直到開始在X M L - R P C的層
次上處理文檔,才知道數據為整型—這可能對D O M是無效的。因為我們所擁有的只是一個被
稱作<i n t>的元素。在X M L中關于數據分類的大量工作最近才開始,因此X M L - R P C的初始創作
者沒有使用它。但是,正是因為我們開始使用它,故而我們將迅速地關注這個問題。
第二個問題是雖然對于一條或兩條消息這種編碼方法可能是較好的選擇,但對于大量數據,
它將變得十分冗長:
程序清單11 - 6 9
因為可能的元素—<i n t>、<s t r i n g>、<a r r a y>等等—只有在高層才會理解,<v a l u e>
和<d a t a>元素在此顯得效果不佳。例如,數組能夠被這樣表示:
程序清單11 - 7 0
(2) 結構
對于X M L - R P C的冗長問題,當我們對一個數據結構進行編碼時將變得更為突出。回憶一下
X M L - R P C部分,< s t r u c t>元素用于傳遞一個結構,并且每部分都有一個< n a m e>和<v a l u e>
對,例如:
程序清單11 - 7 1
第11章服服務器到服務器使用467 下載
相同的消息也能被這樣傳送(假定仍然使用比較冗長的類型消息):
程序清單11 - 7 2
這仍然在使用一些如< s t r i n g>和<i n t>的元素來指明數據類型—稍后將解決該問題—
其優點是它將結構直接映射到了X M L。這意味著如果我們把句法加到X M L - R P C中去,那么我們
能夠直接在客戶和服務器間傳遞X M L。這也表明X M L - R P C如果不通過< s t r u c t>的整理,它無
法做到這一點,因為該< s t r u c t>元素“隱藏”了數據的結構。S O A P將處理這個問題,但是通
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(145)