程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP技巧 >> 用SOAP和ASP進行服務器端更新

用SOAP和ASP進行服務器端更新

編輯:ASP技巧

客戶端和服務器通信可采用一種自定義協議。然而,SOAP為此提供了一種靈活的、易於擴展的和簡單的方案。使用XMLHTTP對象,客戶端浏覽器可請求在服務器上執行一個ASP,並等候服務器的響應以繼續。由於原始客戶端網頁沒有卸載,所以對客戶來說,整個過程都是透明的,而且速度一般都非常快。


 

下面通過幾個示范網頁來探討該技術。由於只有Microsoft Internet Explorer 5和更高的版本才支持XMLhttp,所以本章的例子要想正常工作,你的客戶端必須滿足這一最低要求。

考慮到擴展性,我不希望用一個查詢字符串來傳遞SOAP請求,因為這個字符串的長度限制在2048字節以內。相反,我希望在HTTP標頭中傳遞請求,它不存在這方面的限制。清單A演示了如何使用客戶端JavaScript,通過HTTP標頭向服務器發送基本信息。

SOAP的問題

為了提供清單A的功能,要向服務器發出一個SOAP請求。這種請求由以下4部分組成:

信封包含整個請求,並將包含的信息標識成一個SOAP請求。
包Schema描述了構成SOAP包的信息。
主體包含SOAP包。
包內含有和服務器請求有關的實際信息。
由於SOAP文檔也是一個XML文檔,所以它具有和任何XML文檔一樣的限制。其中最重要的就是文檔必須“良構”(Well-formed),這意味著兩件事情。

首先,良構XML文檔中的標記必須封閉。為演示這一點,最簡單的辦法就是觀察HTML和XHtml的區別。在XML文檔中,所有標記都是容器標記。雖然對於<span>等容器標記來說,這不會造成問題,但對於<hr>等非容器標記,卻必須予以留意。

有兩個辦法將非容器標記變成容器標記。第一個和最明顯的辦法就是為每個標記(例如<hr>)添加一個結束標記(例如</hr>)。另一個辦法是使用自封閉的XML標記;換言之,<hr></hr>可簡寫成<hr />。還要記住,XML文檔要區分大小寫。所以,<hr></hr>是良構的,但<HR></hr>不是。

良構XML文檔的第二個要求是必須用單引號或雙引號來封閉屬性。所以,雖然<input type=text name=stuff />是完全有效的HTML,但卻不是良構的XHtml,必須改成<input type='text' name='stuff' />。

SOAP文檔還具有其他大多數XML文檔都沒有一個限制,也就是必須用一個XML架構(XML Schema)來描述SOAP文檔。架構是文檔結構以及用XML編寫的內容的一種抽象表示,宗旨是為XML解析器定義和描述文檔的結構。

創建SOAP文檔最簡單的方式就是連接幾個字符串。但是,這樣做容易犯錯。相反,更好的做法是使用MSXML XML文檔對象模型(DOM)的方法來創建SOAP文檔。以這種方式創建文檔,可保證文檔總是良構的。為此,我創建了6個Javascript函數來封裝MSXML的DOM對象,並創建一個SOAP文檔來設置、獲取、響應set或get會話變量請求,向服務器發送一個SOAP文檔,以及解析一個SOAP文檔。清單B給出了這些函數;在實際的ASP頁中,則通過一個include語句來引用它們。

xmlDOM、fault和collection函數主要由其他函數調用。xmlDOM函數的作用是返回最新版本的MSXML XML DOM對象的一個實例。fault函數的作用是創建一個錯誤SOAP文檔,指出發生了一個錯誤。collection則是一個類構造函數,它定義了一個JavaScript關聯數組。

第4個函數是sessionSOAP,它也作為一個類構造函數使用,使開發者不必關心具體如何創建一個SOAP文檔來處理會話變量。第5個函數是sessionVariable,它處理同服務器交互所需的XMLHTTP邏輯。第6個函數是sessionParser,它也是一個類構造函數,作用是解析一個會話變量SOAP文檔,獲取會話變量的鍵/值對。清單C展示了具體如何使用這些函數和類。


服務器端的情況

除了sessionSOAP和sessionVariable,客戶端的JavaScript函數和類也可在服務器端使用。之所以這樣設計,是為了避免分別編寫客戶端和服務器端函數來完成相同的任務。清單D顯示了完整的SoapTestClIEnt.ASP頁,它負責設置及獲取會話變量。

本例完整演示了如何使用XMLHTTP、MSXML和SOAP來訪問及更新服務器端信息。還可針對其他目的來使用這些技術,比如更新一個ASP網頁而不進行常規的卸載/重載操作;由於減少了和服務器的通信,所以它有助於加快應用程序的速度。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved