xmlHTTP技術(shù):
----------------------------------------------------------
一、數據庫遠程管理技術(shù)
基于互聯(lián)網(wǎng)的廣域網(wǎng)現代應用中的一個(gè)重要環(huán)節是數據庫遠程監控。首先簡(jiǎn)單回顧一下互聯(lián)網(wǎng)上的數據庫遠程管理技術(shù)的發(fā)展過(guò)程和方式:
早期通過(guò)編寫(xiě)CGI-BIN程序模塊進(jìn)行數據庫遠程管理。但CGI-BIN的運行速度慢,維護很不方便,現在已經(jīng)基本被棄用。
這幾年使用組件對象模型(Component Object Model, COM)的應用非常多,效果也很好。但如果使用的是第三方服務(wù)器(筆者的網(wǎng)站就是建立在第三方的虛擬主機上),服務(wù)器方往往因為保密或其它商業(yè)原因不允許用戶(hù)注冊自己的組件。
近年來(lái)由微軟公司推出的.NET平臺和SUN公司的J2EE平臺都是非常高檔的數據庫遠程管理與服務(wù)平臺。都能提供優(yōu)質(zhì)的多層(n-Tier)應用服務(wù)。
其中,.NET的簡(jiǎn)單對象訪(fǎng)問(wèn)協(xié)議(Simple Object Access Protocol, SOAP)使用超文本傳輸協(xié)議(Hypertext Transfer Protocol, HTTP)和擴展標記語(yǔ)言(Extensible Markup Language, XML)技術(shù)實(shí)現跨系統(例如Windows - Linux)的通訊服務(wù)方式已經(jīng)廣為開(kāi)發(fā)商接受和使用。許多大型應用,例如企業(yè)資源計劃(Enterprise resource planning, ERP)等都建立在這樣的大型平臺之上。
但對于中小型應用,比如一個(gè)網(wǎng)站的建設和維護,這種大型應用平臺就顯得有些尾大不掉,開(kāi)銷(xiāo)也過(guò)于龐大。
曾經(jīng)在互聯(lián)網(wǎng)技術(shù)和Java技術(shù)方面一度落后的微軟公司在XML應用開(kāi)發(fā)則走在了前頭。她的XML解析器(MSXML)中的XMLHTTP協(xié)議是一個(gè)非常方便實(shí)用的客戶(hù)/服務(wù)通訊管道。綜合運用XMLHTTP以及ActiveX數據對象(ActiveX Data Objects, ADO/ADOX)可以簡(jiǎn)單方便地實(shí)現數據庫遠程管理。
本文介紹如何綜合運用XMLHTTP和ADO/ADOX進(jìn)行遠程數據庫管理。
二、數據庫遠程管理體系
數據庫遠程管理的任務(wù)流程是:
1、客戶(hù)端向服務(wù)端發(fā)出數據庫結構和數據的查詢(xún)或修改指令。
2、服務(wù)端接受并執行有關(guān)指令并向客戶(hù)端返回結果。
3、客戶(hù)端接受并顯示服務(wù)端返回的指令執行結果。
實(shí)現數據庫遠程管理的二個(gè)主要關(guān)鍵環(huán)節是:
1、客戶(hù)端與服務(wù)端之間的指令上傳和結果下傳的數據通道,由XMLHTTP協(xié)議實(shí)現。
2、服務(wù)端前沿與數據庫之間的指令傳送和結果返回,由起著(zhù)中間層作用的ADO/ADOX接口完成。
三、XMLHTTP的使用
顧名思義,XMLHTTP是個(gè)傳送XML格式數據的超文本傳輸協(xié)議。
實(shí)際上,XMLHTTP的數據傳輸過(guò)程更為靈活一些:
它上傳的指令可以是XML格式數據,也可以是字符串,流,或者一個(gè)無(wú)符號整數數組。還可以是URL的參數。
它下達的結果可以是XML格式數據,也可以是字符串,流,或者一個(gè)無(wú)符號整數數組。
詳情可參閱文末鏈接。
客戶(hù)端調用XMLHTTP的過(guò)程很簡(jiǎn)單,只有5個(gè)步驟:
1、創(chuàng )建XMLHTTP對象
2、打開(kāi)與服務(wù)端的連接,同時(shí)定義指令發(fā)送方式,服務(wù)網(wǎng)頁(yè)(URL)和請求權限等。
客戶(hù)端通過(guò)Open命令打開(kāi)與服務(wù)端的服務(wù)網(wǎng)頁(yè)的連接。與普通HTTP指令傳送一樣,可以用"GET"方法或"POST"方法指向服務(wù)端的服務(wù)網(wǎng)頁(yè)。
3、發(fā)送指令。
4、等待并接收服務(wù)端返回的處理結果。
5、釋放XMLHTTP對象
XMLHTTP方法:
Open bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword
bstrMethod:數據傳送方式,即GET或POST。
bstrUrl:服務(wù)網(wǎng)頁(yè)的URL。
varAsync:是否同步執行。缺省為T(mén)rue,即同步執行,但只能在DOM中實(shí)施同步執行。
應用中一般將其置為False,即異步執行。
bstrUser:用戶(hù)名,可省略。
bstrPassword:用戶(hù)口令,可省略。
Send varBody
varBody:指令集??梢允荴ML格式數據,也可以是字符串,流,或者一個(gè)無(wú)符號整數數組。也可以省略,讓指令通過(guò)Open方法的URL參數代入。
setRequestHeader bstrHeader, bstrValue
bstrHeader:HTTP 頭(header)
bstrValue:HTTP 頭(header)的值
如果Open方法定義為POST,可以定義表單方式上傳:
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
XMLHTTP屬性:
onreadystatechange:在同步執行方式下獲得返回結果的事件句柄。只能在DOM中調用。
responseBody:結果返回為無(wú)符號整數數組。
responseStream:結果返回為IStream流。
responseText :結果返回為字符串。
responseXML:結果返回為XML格式數據。
下面是本文附件源程序中的一個(gè)應用示例:
Function GetResult(urlStr)
Dim xmlHttp
Dim retStr
Set xmlHttp = CreateObject("Msxml2.XMLHTTP") ‘創(chuàng )建對象
On Error Resume Next ‘出錯處理
xmlHttp.Open "POST", urlStr, False ‘用POST方式打開(kāi)連接,異步執行。
xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" ‘上傳表單
xmlHttp.Send ‘發(fā)送指令
If Err.Number = 0 Then ‘如果連接正確
retStr = xmlHttp.responseText ‘等待并獲得服務(wù)端返回的結果字符串
Else
retStr = "Url not found" ‘否則返回出錯信息
End If
Set xmlHttp = nothing ‘釋放對象 GetResult = retStr ‘返回結果
End Function
GetResult()函數帶入一個(gè)服務(wù)網(wǎng)頁(yè)的URL參數,把上傳的指令安放在URL后面的參數上,如:
urlStr = "server.asp?cmd=" & cmd & "&db=" & db & "table=" & table
cmd:執行方式,例如查詢(xún),修改,刪除等等。
db:服務(wù)端數據庫名
table:服務(wù)端表名
然后提交指令,等待并接收返回的處理結果。結果以字符串方式返回。
最后由函數調用者處理并顯示結果。
聯(lián)系客服