摘要:本文分析了Web Service的特點,提出了一種基于Microsoft.NET的 Web Service技術訪問分布異構數據庫的體系結構,并采用.NET技術實現了原型系統。在原型系統中,使用Web Service將分布于Internet上的不同的數據庫系統中的數據集成,向訪問數據庫的應用程序提供統一的數據操作接口,實現了分布式數據庫的透明訪問。
關鍵詞:異構數據庫;.NET技術;XML Web Service;
摘要:本文分析了Web Service的特點,提出了一種基于Microsoft.NET的 Web Service技術訪問分布異構數據庫的體系結構,并采用.NET技術實現了原型系統。在原型系統中,使用Web Service將分布于Internet上的不同的數據庫系統中的數據集成,向訪問數據庫的應用程序提供統一的數據操作接口,實現了分布式數據庫的透明訪問。
關鍵詞:異構數據庫;.NET技術;XML Web Service;
1、引言
隨著Internet的迅速發展,基于Web的信息交流、共享與協作成為企業的重要發展方向。企業的大量重要的信息都是通過數據庫系統進行存儲和管理的,而不同的企業或者同一企業的不同部門往往采用了不同的數據庫管理系統,如Oracle、DB2、Informix、Sybase、MS SQL Server等,而且這些不同的數據庫管理系統在地理位置上往往也是分布的,只能通過Internet訪問。例如某公司在北京,上海,南京,武漢等地都有分公司,甚至在國外也有分公司。各分公司可能安裝了不同的數據庫管理系統。即使該公司進行了信息系統規劃,但是,隨著時間的推移,人事的變動以及數據庫技術的進步和數據庫市場的變化,仍然可能出現分布的異構數據庫的情況。該公司的管理者對下級各分公司,各部門要進行統一協調的管理,調度,以降低成本岣呱剩鑾抗鏡木赫?就必須對這些分布異構數據庫進行集成。
2、基于Microsoft .NET的Web Service
2.1 Web Service簡介
Web Service是一種構建開放的分布式應用程序的模型,它能在所有支持Internet通信的操作系統上實現。
Web service體系結構基于三種角色(服務提供者、服務注冊中心和服務請求者)之間的交互。交互涉及發布、查找和綁定操作。這些角色和操作一起作用于 Web Service構件:Web Service軟件模塊及其描述。在典型情況下,服務提供者托管可通過網絡訪問的軟件模塊(Web 服務的一個實現)。服務提供者定義 Web Service的服務描述并把它發布到服務請求者或服務注冊中心。服務請求者使用查找操作來從本地或服務注冊中心檢索服務描述,然后使用服務描述與服務提供者進行綁定并調用 Web Service實現或同它交互。圖 1 圖示了這些操作、提供這些操作的組件及它們之間的交互[1]。
Web Service 的所有協議都基于標準的Web協議,諸如:HTTP,擴展的標記語言XML,簡單對象訪問協議SOAP,Web服務描述語言WSDL,通用描述、發現與集成UDDI等。這些協議的關系如圖2所示[2]。協議組成堆棧的形式,每一個下層提供對它上層的支持,同時每一個上層都必須基于所有的下層協議之上。
Web 服務協議棧的基礎是網絡層。Web 服務要被服務請求者調用,就必須是可以通過網絡訪問的。HTTP 憑借其普遍性,成為了Internet可用的 Web 服務真正的標準網絡協議。Web 服務還可以支持其它Internet協議,(這句話什么意思,要說完整)
SOAP以XML標準封裝調用遠程服務的格式,有別于其它分布式對象模型調用特定的調用格式,例如CORBA的GIOP以及DCOM的ORPC。由于SOAP以XML封裝調用格式,因此它可以使用任何的實體傳輸層來傳送,例如HTTP,TCP或是SMTP等。
WSDL 定義了服務交互的接口和結構,是基于 XML 的服務描述的標準。WSDL使用XML計劃來描述Web Service的結構。
UDDI注冊和發布Web Service。UDDI使用XML計劃定義注冊表的結構,使用SOAP指定與注冊表的通信。[1]
以往分布式應用程序的模型都是基于組件的對象模型,比如:公共對象請求代理CORBA,分布組件對象模型DCOM, 遠程方法調用RMI和對象請求代理交互協議IIOP,都依賴于其特殊的對象模型協議。這些對象模型協議在跨平臺,穿越防火墻以及協議間的互操作方面都非常困難。而Web service的構建所基于的一套標準定義了應用程序如何在Web上實現互操作性,因此,Web Service令基于組件的開發和web的結合達到最佳;另外,利用了SOAP和XML對這些服務建立了通信模型從而消除了特殊對象模型之間進行交互的障礙。
2.2 在Microsoft .NET上實現Web Service
實現Web Service的方式多種多樣,Microsoft .NET的ASP.NET是創建、部署和使用XML Web Service的較好的平臺。
(1)建立Web Service
使用ASP.NET將類外置為Web Service,必須將類放入.asmx文件中。.asmx文件是Web Service的入口。Web Service的代碼既可以是.asmx文件,也可以是后臺代碼文件。如下:
<%@ WebService Language="C#" Class="WebServiceClassName" %>
using System.Web.Services;
public class WebServiceClassName
{
[WebMethod]
public DataType DoSomeThing()
{
}
}
Web Service 指示符指定了.asmx文件中使用的語言,命名了外置為Web Service的類。(.asmx文件中可以包含多個類,但只有一個類可以用作Web Service)
在用于Web Service 的方法前添加WebMethod屬性(Web Service的類及公開的方法必須聲明為public)。
(2)部署Web Service
ASP.NET Web Service的部署工作很簡單:只需要把.asmx文件放在Web應用程序的目錄中。
(3)測試Web Service
對于Web Service的測試,用戶不必編寫測試客戶機程序來測試Web Service。ASP.NET 提供了可以測試Web Service的測試頁,同時提供WSDL文件格式的Web Service的結構化描述。測試頁的路徑是:http://WebServiceSite/ WebServiceAppPath/filename.asmx。filename.asmx?wsdl是Web Service描述的連接。
(4)消費Web Service
消費Web Service即其他應用程序調用Web Service。在Microsoft.NET中,使用代理類將Web Service的功能組合到其他應用程序中。代理類可以引用遠程的Web Service,在用戶的應用程序中使用其功能。如圖3所示:
3、基于.NET的分布式異構數據庫的集成
3.1 三層架構簡介
目前,三層架構由于系統的層次和邏輯清晰,系統開發和維護的成本低以及系統的擴展性強等優點被廣泛采用。.NET的Web分布式應用程序也采用三層架構,它邏輯地分為三個基本層,如圖4所示[3]。

·表示層:向用戶瀏覽器提供豐富、靈活和交互的Web界面。具有在平臺之間提供更大程度的可移植性的優點。主要由ASP.NET應用程序來實現。
·業務邏輯層:該層被分為應用程序服務器與服務,它們可用于支持客戶端。可以使用 .NET 框架編寫 Web 應用程序以利用 COM+ 服務、消息隊列 (MSMQ)、目錄服務和安全性服務。應用程序服務反過來可以與數據訪問層上的若干個數據服務進行交互。
·數據訪問和存儲層:支持數據訪問和存儲的數據服務包括:ADO.NET,通過使用腳本語言或編程語言提供對數據的簡化編程訪問。OLE DB,由 Microsoft 開發的公認的通用數據提供程序。XML,用于指定數據結構的標記標準。
3.2 利用.NET的XML Web Service技術實現分布式異構數據庫的訪問
Microsoft.NET的XML Web Service技術為實現分布式異構數據庫的訪問提供了強有力的支持。基于XML Web Service技術訪問分布異構數據庫的體系結構充分利用.NET的Web分布式應用程序三層架構的優點,是一個基于 Web 應用程序松散耦合三層架構:最底層為各分布的異構數據庫,其上為兩層XML Web Service。其結構如圖5所示

圖5 基于XML Web Service訪問分布異構數據庫
|
在數據庫之上,針對不同的數據庫,建立相應的XML Web Service。該XML Web Service利用ADO.NET中的數據提供程序所包含的兩個用于訪問企業數據庫的數據提供程序:OLE DB .NET 數據提供程序和 SQL Server .NET 數據提供程序,可以連接不同數據庫。
該XML Web Service主要連接相應的數據庫,執行對該數據庫的檢索,插入,更新等一些數據操作,并向其客戶端提供數據庫的操作方法,使用DataSet向客戶端提供數據和從客戶端獲得數據。
由于位于不同地點的不同數據庫系統之上的XML Web Service統一以DataSet向數據集成XML Web Service提供數據并提供統一的公開方法,從而屏蔽了不同數據庫管理系統的異構信息。使得數據集成XML Web Service不必理會不同數據庫的差異,集中處理各分布的DataSet的集成。
在此之上的XML Web Service是數據信息集成層。該層通過HTTP調用底層分布的XML Web Service的公開的方法,獲得來自不同數據庫系統的數據,并將這些處于不同DataSet中的數據集成到一個DataSet中,通過向上公開的方法將數據提供給訪問數據庫的應用程序。
該層對訪問數據庫的應用程序屏蔽了數據庫的分布信息,使訪問數據庫的應用程序對數據的操作就像是在使用一個數據庫。
這個架構的主要節點是數據集成XML Web Service。它的關鍵在于DataSet的集中與分散,即當外部應用程序讀取數據庫數據時,該層將從多個底層XML Web Service獲取多個DataSet并將其集成到一個DataSet中;當外部應用程序更新數據時,該層將判斷被更新的記錄屬于那個數據庫并調用相應的XML Web Service的公開方法更新該數據庫。為了達到此目的,在該層設有一個數據結構,該數據結構記錄各分散的DataSet的相關信息:各分散的DataSet在集成DataSet中的位置。當將從底層XML Web Service獲取的多個DataSet集成到一個DataSet中時,將信息填入數據庫;當外部應用程序更新記錄并通過DataSet傳回時時,該層從傳回的DataSet中獲取被更新改的記錄數據及位置,根據記錄數據結構中各分散的DataSet的信息,確定被更新的記錄屬于哪一個分散DataSet,從而更新該DataSet并調用相應XML Web Service的方法完成更新。
該架構的原型系統已完成各分布的數據庫信息的集成以及數據的更新等功能,實現了分布式數據庫的透明訪問。
3.3 原型系統的特點
原型系統充分利用ADO.NET的特點:斷開式數據結構、與 XML 的緊密集成、能夠組合來自多個、不同數據源的數據的通用數據表示形式以及為與數據庫交互而優化的功能。相對于其它分布異構數據庫的實現,該系統有如下優點:
·分布性
如上所述,本文提出的架構是在各分布的異構數據庫之上架構了兩層XML Web Service。由于XML Web Service的所有協議都基于標準的Web協議,客戶端可以通過Internet調用XML Web Service,獲得和發送基于XML的串行格式的數據。這樣,即使各異構的數據庫在地理上分布地很廣,對于位于不同地點的不同數據庫系統之上的XML Web Service,其客戶端――數據集成XML Web Service仍然可以穿越防火墻,通過Internet得到相同格式的數據。
·靈活性
與數據處理主要依賴于基于連接的雙層模型不同,該架構使用多層結構,數據處理采用斷開方式,因此具有更佳的可縮放性。
該架構頂層的XML Web Service可以根據需要靈活添加或刪除局部數據庫,而只需要對數據集成XML Web Service作少量修改。
·健壯性
該架構不會因為某一個局部數據庫系統的崩潰而導致整個系統不工作,而且,當某一個局部數據庫系統崩潰而采用其備份數據庫時,該架構可以方便地用備份數據庫替換崩潰的局部數據庫系統。
·簡化應用程序開發
在該架構之上開發引用程序將與特定的數據庫管理系統無關,只需要了解數據庫總的數據及頂層XML Web Service提供的數據庫操作方法。
4、結論
Web Service是可以通過Internet訪問的應用邏輯單元,可以說是基于組件的分布式技術在Internet上的擴展。它在創建跨平臺,跨Internet,適應Internet的可伸縮性的應用程序時,具有非常大的優勢。通過Web Service對分布于Internet上的不同數據庫進行整合,實現分布式數據庫的透明訪問,可以大大方便公司內部以及公司之間的信息交流與共享。下一步要完成的工作將是在數據集成XML Web Service層的用戶認證、權限、安全以及數據完整性、一致性策略。
參考文獻
[1], Heather Kreger 《Web 服務概念性體系結構》(Web Services Conceptual Architecture)
IBM Software Group 2002 年 4 月
2, Russ Basiura Mike Batongbacal 等著 康博譯《ASP.NET Web 服務高級編程》 清華大學出版社 2002年6月
3, Ashish Banerjee Aravind Corera 等著 康博譯 《C# Web 服務高級編程》 清華大學出版社2002年6月