摘 要:基于網(wǎng)絡(luò)的計(jì)量測(cè)試系統(tǒng)需要解決的問題之一就是遠(yuǎn)程數(shù)據(jù)訪問。對(duì)ADO的RDS的對(duì)象模型和編程模型進(jìn)行研究,闡述RDS的功能和特點(diǎn),研究RDS數(shù)據(jù)訪問技術(shù)的具體實(shí)現(xiàn)方法,分析RDS的安全性并提出相應(yīng)的解決方案。作為一種先進(jìn)的數(shù)據(jù)訪問技術(shù),RDS能為計(jì)量測(cè)試系統(tǒng)遠(yuǎn)程數(shù)據(jù)訪問提供有力的技術(shù)基礎(chǔ)。
關(guān)鍵詞:ADO;RDS;三層應(yīng)用程序模型;計(jì)量測(cè)試系統(tǒng)
中圖分類號(hào):TP274文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1004373X(2008)2008903
Research on the Technique of Remote Data Access Based on RDS
WANG Yingna1,SONG Jianbo2,XIANG Xiaomei2
(1.Navy 704 Factory,Qingdao,266109,China;2.PLA 91635 Unit,Beijing,102249,China;
3.93 Element,PLA 91388 Unit,Zhanjiang,524022,China)
Abstract:Building a measurement and test system to run on a network,one of the problems needing to solve is remote data access.The object model and programming model of RDS,the function and characteristics of RDS ,and the technology of remote data access based on RDS is described in this paper.After analyzing the security of RDS,a solution for insuring the security is put forward as a basic technique for the remote data access.As an advanced technology of remote data access,RDS can provide powerful technologic support for the remote data access in the measurement and test system.
Keywords:ADO;RDS;three-tier-application model;measurement and test system
1 引 言
隨著網(wǎng)絡(luò)的普及應(yīng)用,計(jì)量測(cè)試業(yè)務(wù)中已逐漸將遠(yuǎn)程數(shù)據(jù)訪問技術(shù)應(yīng)用到測(cè)量系統(tǒng)中。使用Microsoft ActiveX Data Objects (ADO)通過 OLE DB 提供者對(duì)在數(shù)據(jù)庫服務(wù)器中的數(shù)據(jù)進(jìn)行訪問和操作。其主要優(yōu)點(diǎn)是易于使用、高速、內(nèi)存消耗低和占用磁盤空間較少。ADO 支持基于客戶端/服務(wù)器和瀏覽器/服務(wù)器模型的應(yīng)用。
RDS是ADO的組件,它提供快速且高效的數(shù)據(jù)連接,并為基于IE瀏覽器的應(yīng)用程序提供數(shù)據(jù)發(fā)布框架。它采用C/S架構(gòu)和分布式技術(shù),使用HTTP,HTTPS和DOCM應(yīng)用協(xié)議。通過 RDS 可以實(shí)現(xiàn)將數(shù)據(jù)從服務(wù)器移動(dòng)到客戶端應(yīng)用程序或Web 頁、在客戶端對(duì)數(shù)據(jù)進(jìn)行處理然后將更新結(jié)果返回服務(wù)器的操作。RDS改善了客戶端性能和靈活性。
2 三層應(yīng)用程序模型
遠(yuǎn)程數(shù)據(jù)服務(wù)技術(shù)建立在3層應(yīng)用程序模型基礎(chǔ)上。該模型包括客戶端層、中間層和數(shù)據(jù)源層。
客戶端層 運(yùn)行Web 瀏覽器或單獨(dú)編譯的前端應(yīng)用程序。Web 瀏覽器顯示的Web 頁面可以顯示并處理來自遠(yuǎn)程數(shù)據(jù)源的數(shù)據(jù)。或者由前端應(yīng)用程序顯示并處理來自遠(yuǎn)程數(shù)據(jù)源的數(shù)據(jù)。
中間層 運(yùn)行封裝了組織業(yè)務(wù)規(guī)則的組件。中間層組件可以是在 Internet Information Server 上執(zhí)行的 Active Server Pages 腳本,或者是單獨(dú)編譯的可執(zhí)行文件。
數(shù)據(jù)源層 運(yùn)行數(shù)據(jù)庫管理系統(tǒng) (DBMS),該管理系統(tǒng)可以是 Microsoft SQL Server 數(shù)據(jù)庫或者其他的SQL數(shù)據(jù)庫。
這些層不必對(duì)應(yīng)網(wǎng)絡(luò)上的物理位置。所有三層可只存在于2臺(tái)計(jì)算機(jī)上。一臺(tái)計(jì)算機(jī)運(yùn)行Web瀏覽器,另一臺(tái)計(jì)算機(jī)運(yùn)行 Internet Information Server 和 Microsoft SQL Server;或者,一臺(tái)計(jì)算機(jī)運(yùn)行前端應(yīng)用程序,另一臺(tái)計(jì)算機(jī)運(yùn)行中間層組件和 Microsoft SQL Server。
3 RDS對(duì)象模型
RDS對(duì)象模型包括3個(gè)主要的對(duì)象: RDS Server.Data Factory,RDS.DataSpace,RDS.Data Control。如圖1所示。
3.1 服務(wù)器端對(duì)象RDSServer.Data Factory
RDSServer.DataFactory對(duì)數(shù)據(jù)源執(zhí)行 SQL 查詢并返回 Recordset 對(duì)象,或從客戶端獲得 Recordset 對(duì)象并更新數(shù)據(jù)源。RDS.DataFactory 不進(jìn)行任何驗(yàn)證,也沒有建立業(yè)務(wù)規(guī)則。如果需要具備驗(yàn)證和業(yè)務(wù)規(guī)則功能,則必須創(chuàng)建自定義業(yè)務(wù)對(duì)象來取代RDS.DataFactory對(duì)象。Visual Basic 6.0 企業(yè)版是創(chuàng)建自定義業(yè)務(wù)對(duì)象(ActiveX DLL)的一個(gè)很好用的工具。創(chuàng)建ActiveX DLL后,必須在服務(wù)器上注冊(cè),還必須在中間服務(wù)器上添加 DLL 的 PROGID 到系統(tǒng)注冊(cè)表入口中給予 DLL 啟動(dòng)的權(quán)限:
[HKEY_LOCAL_MACHIN\\SYSTEM\\Current ControlSet\\Services\\W3SVC\\Parameters\\ADC Launch]

3.2 客戶端對(duì)象RDS.DataSpace和RDS.DataControl
RDS.DataSpace 是一個(gè)非可視的客戶端對(duì)象。它允許用 RDS 通過 HTTP,HTTPS 或 DCOM 創(chuàng)建一個(gè)位于遠(yuǎn)程服務(wù)器上的業(yè)務(wù)對(duì)象實(shí)例。RDS.DataSpace 為業(yè)務(wù)對(duì)象創(chuàng)建一個(gè)客戶端代理。客戶端代理幫助在不同的機(jī)器之間壓縮、傳送 (組織)和解壓縮ADO記錄集。
DataSpace對(duì)象負(fù)責(zé)與服務(wù)器進(jìn)行通信,同時(shí)也是數(shù)據(jù)傳輸?shù)耐ǖ馈ataSpace對(duì)象由客戶端腳本語言或用HTML語言中的<OBJECT>標(biāo)記創(chuàng)建。使用RDS.DataSpace的Create Object方法,可以在遠(yuǎn)程服務(wù)器上創(chuàng)建一個(gè) RDS.DataFactory 實(shí)例。RDS.Data Space對(duì)象與RDS Server.Data Factory協(xié)同工作。RDS.Data Factory執(zhí)行查詢并返回ADO記錄集。RDS.Data Space 將ADO記錄集下載到客戶端,重建記錄集,并設(shè)置RDS.Data Control的Source Recordset到重建的記錄集。
RDS.DataControl數(shù)據(jù)控件負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)及管理。它與HTML元素綁定在一起才能顯示數(shù)據(jù)。數(shù)據(jù)控件為HTML元素提供數(shù)據(jù),由HTML元素將數(shù)據(jù)顯示在Internet Explorer 的 Web 頁上。
綁定數(shù)據(jù)控件與HTML元素,需要設(shè)置HTML元素2個(gè)屬性DATASRC和DATAFLD。DATASRC,確定包含數(shù)據(jù)的數(shù)據(jù)控件。在數(shù)據(jù)源名稱前總是要加一個(gè)“#”。DATAFLD,確定綁定數(shù)據(jù)控件中的哪個(gè)字段。這些字段是數(shù)據(jù)控件管理的數(shù)據(jù)中的列名。對(duì)于一個(gè)數(shù)據(jù)庫,就是表中的列名。
RDS.DataControl 對(duì)象也有其自己的方法用于定位、排序和篩選記錄。這些方法與ADO Recordset 對(duì)象的方法相似。
3.3 RDS事件
RDS支持2個(gè)獨(dú)立于ADO事件模型的自身事件:onReadyStateChange,onError。
在RDS.DataControl 的ReadyState 屬性更改時(shí)調(diào)用onReadyStateChange事件,以此對(duì)異步操作的完成、結(jié)束或出現(xiàn)錯(cuò)誤等發(fā)出通知。
當(dāng)發(fā)生錯(cuò)誤時(shí),包括在異步操作執(zhí)行的過程中發(fā)生錯(cuò)誤時(shí),調(diào)用onError事件。
4 RDS編程模型
RDS通過 Internet Information Server訪問和更新數(shù)據(jù)源。編程模型則指定為完成這個(gè)目的所必需的活動(dòng)序列。
RDS實(shí)現(xiàn)三層應(yīng)用程序環(huán)境中的數(shù)據(jù)遠(yuǎn)程訪問:客戶端應(yīng)用程序指定將在服務(wù)器上執(zhí)行的程序,并指定用來返回相應(yīng)信息的參數(shù)。服務(wù)器上被調(diào)用的程序訪問指定的數(shù)據(jù)源、檢索信息、對(duì)數(shù)據(jù)進(jìn)行相應(yīng)處理,然后將結(jié)果信息返回給客戶端應(yīng)用程序。
RDS 按照以下編程模型工作:
(1) 創(chuàng)建DataSpace對(duì)象,并指定服務(wù)器上運(yùn)行的程序(DataFactory或自定義業(yè)務(wù)對(duì)象)。
(2) 將參數(shù)傳送到服務(wù)器程序并調(diào)用服務(wù)器程序(DataFactory或自定義業(yè)務(wù)對(duì)象)。服務(wù)器程序通過ADO 訪問數(shù)據(jù)源。
(3) 服務(wù)器程序從數(shù)據(jù)源獲得Recordset 對(duì)象。DataFactory可以對(duì)Recordset 對(duì)象進(jìn)行處理。
(4) 服務(wù)器程序與DataSpace對(duì)象協(xié)作將Recordset 對(duì)象返回客戶端DataControl對(duì)象。
(5) DataControl對(duì)象與HTML可視化控件綁定,Recordset 對(duì)象被轉(zhuǎn)換成為便于可視化控件使用的格式。
(6) 對(duì)客戶端Recordset對(duì)象所做的修改都將通過DataSpace對(duì)象返回給服務(wù)器程序DataFactory或自定義業(yè)務(wù)對(duì)象,服務(wù)器程序用這些修改后的記錄集更新數(shù)據(jù)源。
RDS運(yùn)行流程如圖2所示:

4.1 RDS對(duì)象的創(chuàng)建順序
先創(chuàng)建DataSpace對(duì)象:
<OBJECT ID=\"RDS1\" WIDTH=1 HEIGHT=1
CLASSID=\"CLSID:BD96C556-65A3-11D0-983A-00C04FC29E36\"> </OBJECT>
再由DataSpace對(duì)象創(chuàng)建DataFactory對(duì)象:
Set DF1 = DS1.CreateObject(\"RDSServer.DataFactory\",\"http://<%=Request.ServerVariables(\"SERVER_NAME\")%>\")
或者:
先創(chuàng)建DataControl對(duì)象(順序上與DataSpace和DataFactory沒有依賴關(guān)系):
<OBJECT CLASSID=\"clsid:BD96C556-65A3-11D0-983A-00C04FC29E33\" ID=\"DC1\">
<PARAM NAME=\"SQL\" VALUE=\"SELECT * FROM authors\">
<PARAM NAME=\"Connect\" VALUE=\"DSN=YourDSN\">
<PARAM NAME=\"Server\" VALUE=\"http://YourServer/\">
</OBJECT>
再由DataControl對(duì)象創(chuàng)建DataFactory對(duì)象:
Set DF1 = DC1.CreateObject(\"RDSServer.DataFactory\",\"http:// <%=Request.ServerVariables(\"SERVER_NAME\")%>\")
使用RDSServer.DataFactory對(duì)象的Query方法獲得Recordset對(duì)象:
Dim RS as ADODB.Recordset
Set DF1 = DS1.CreateObject(\"RDSServer.DataFactory\",\"http://yourServer\")
Set RS = DF1.Query (\"DSN=pubs\",\"SELECT * FROM authors\")
4.2 Recordset對(duì)象的使用
Web 頁上的可視控件無法直接訪問Recordset對(duì)象。但可以通過 DataControl訪問Recordset對(duì)象。當(dāng) DataControl的SourceRecordset屬性設(shè)置為Recordset對(duì)象時(shí),DataControl 便可被可視控件使用。將可視控件對(duì)象的DATASRC參數(shù)設(shè)置為 RDS.DataControl,并將 DATAFLD 屬性設(shè)置為 Recordset 對(duì)象字段。
DC1.SourceRecordset = RS
<DIV DATASRC=\"#DC1\" DATAFLD=\"au_fname\"></DIV>
<DIV DATASCR=\"#DC1\" DATAFLD=\"au_lname\"></DIV>
5 RDS的安全問題
在創(chuàng)建DataControl對(duì)象時(shí),如果使用Connect和SQL屬性,連接服務(wù)器的名稱以及數(shù)據(jù)庫的相關(guān)細(xì)節(jié)就暴露出來,獲得DSN、用戶標(biāo)識(shí)符和密碼信息的外部用戶可以編寫將任何查詢發(fā)送到該數(shù)據(jù)源的頁面。安全的做法是使用URL屬性。這樣,用戶所見到的是一個(gè)ASP網(wǎng)頁的URL地址,沒有任何有關(guān)服務(wù)器和數(shù)據(jù)庫的詳細(xì)信息。
<OBJECT CLASSID=\"clsid:BD96C556-65A3-11D0-983A-00C04FC29E33\" ID=\"DC1\" > <PARAM NAME=\"URL\" VALUE=\"DataPage.asp\"> </OBJECT>
如果希望對(duì)數(shù)據(jù)源有更多的限制訪問,可以取消注冊(cè)并刪除 DataFactory對(duì)象 (msadcf.dll),用自定義業(yè)務(wù)對(duì)象取代DataFactory對(duì)象。
6 結(jié) 語
RDS采用基于SSL(Secure Sockets Layer)的HTTPS協(xié)議,將記錄集透明地緩存到客戶端,在客戶端處理數(shù)據(jù)后將修改的記錄集提交給服務(wù)器更新數(shù)據(jù)源。避免反復(fù)訪問服務(wù)器數(shù)據(jù),節(jié)約了服務(wù)器資源,使得開發(fā)以數(shù)據(jù)為中心的基于網(wǎng)絡(luò)的數(shù)據(jù)庫應(yīng)用程序更簡(jiǎn)單,提高了遠(yuǎn)程數(shù)據(jù)訪問的安全水平,從而為計(jì)量測(cè)試業(yè)務(wù)中利用該技術(shù)進(jìn)行遠(yuǎn)程數(shù)據(jù)訪問提供了技術(shù)支持。
參考文獻(xiàn)
[1]John V Petersen.ADO Jumpstart for Microsoft Visual FoxPro Developers,1999.
[2]Kamaljit Bath.Using the Customization Handler Feature in RDS 2.1,1999.
[3]Kamaljit Bath.Remote Data Service in MDAC,1998.
[4]Rob Thayer.Visual Basic 6 揭秘\\.北京:電子工業(yè)出版社,1999.
[5]習(xí)勝豐.基于RDS與MTS的N層事務(wù)性Web數(shù)據(jù)庫應(yīng)用程序的構(gòu)造與實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2003(11):19-21.
[6]李寧,許林英.MTS資源管理深入分析及應(yīng)用[J].計(jì)算機(jī)應(yīng)用研究,2002,19(5):30-40,48.
[7]丁鵬,劉莉.C/S,B/S模式中的分布式計(jì)算與MTS解決方案[J].計(jì)算機(jī)應(yīng)用研究.2000,17(12):60-62.
[8]彭江平,謝勇.利用RDS實(shí)現(xiàn)瀏覽器環(huán)境下的批量數(shù)據(jù)修改[J].微型機(jī)與應(yīng)用,2000,19(6):55-58.
[9]劉福明,顧文涓,李莉,等.基于MTS的三層結(jié)構(gòu)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2002,19(5):92-94.
[10]鄧亞玲,王新房,潘永湘,等.RDS在Web基信息管理系統(tǒng)開發(fā)中的應(yīng)用[J].計(jì)算機(jī)工程與應(yīng)用,2002,38(3):135-137.
[11]賴學(xué)成,張薇薇.基于B/S結(jié)構(gòu)的數(shù)據(jù)綁定技術(shù)及遠(yuǎn)程數(shù)據(jù)服務(wù)應(yīng)用的構(gòu)筑[J].計(jì)算機(jī)工程,2001,27(1):130-132.
[12]李革新,陳建新.基于Web數(shù)據(jù)庫的開發(fā)方案及其編程模型研究[J].計(jì)算機(jī)工程,2001,27(12):191-193.
作者簡(jiǎn)介 王瑩娜 女,1972年出生,碩士研究生,海軍704廠工程師。