摘 要分析Web Service體系結構,介紹其技術優勢,并通過對一個會員驗證系統的實現,研究運用Web Service技術實現對遠程數據庫的訪問。
關鍵詞Web Service;Net;遠程數據庫
中圖分類號 TP311.11 文獻標識碼 A 文章編號 1671-489X(2008)08-0091-03
1 引言
隨著網絡技術的發展,軟件開發經歷了單機、C/S、B/S 3種模式,Web信息處理技術也經歷了從采用中間件如CGI、ASP傳統的3層模式到目前以Corba、DCom、EJB等構件技術為基礎的多層分布式模型。這些模型最典型的應用目的,就是使客戶端桌面程序可以直接訪問遠程數據庫。雖然像Corba、Dcom、EJB等分布模型在一定程度上實現了這一點,但如果客戶端和服務器之間隔有防火墻或代理服務器,那么來自于Corba等構件的調用就會被認為是惡意訪問而可能被擋在防火墻外。這些組件由于嚴格受限于TCP/IP端口和特定的網絡傳輸協議,無法直接解決基于B/S的瘦客戶應用程序的處理問題,而Web Service技術的出現可以很好地解決這個問題,利用Web Service技術實現訪問遠程數據庫具有較大的優勢。本文擬通過一個基于Web Service會員驗證系統的模型來實現對數據庫的訪問,其研究意義在于解決客戶端訪問遠程數據庫的困難。
2 Web Service技術簡介
客戶端與服務器的通信問題,一個完美的解決方法是使用HTTP協議來通信。這是因為任何運行Web瀏覽器的機器都在使用HTTP協議。同時,當前許多防火墻也配置為只允許HTTP連接。利用Web Service可以能夠用編程的方法通過Web調用來實現服務器端的某個功能的應用程序。
Web Service 就是一個應用程序,它向外界暴露出一個能夠通過Web進行調用的API,也就是能夠用編程的方法通過Web來調用這個應用程序。調用這個Web Service應用程序的叫做客戶。從本質層次來講,Web服務是放置于Web站點上的可重用構件。Web服務可以分散于互聯網上的各個地方,通過相互調用來協同完成特定任務。資源共享須解決的首要問題,是提高資源的可管理性。由于服務器上的應用軟件只對特定資源操作,且不同的應用軟件對相同資源的操作有一定程度的差異,這種資源的自治性導致難以為每個特定資源定義標準的接口。利用面向服務的集成(Service Oriented Integration)和虛擬化技術能夠解決該問題。這是因為面向服務能夠對復雜的過程和功能進行封裝,并通過消息交換為服務請求者提供某種功能。Web服務是目前流行的提供面向服務的技術,具有獨立于平臺和執行的特性,能夠為建立在不同硬件平臺、操作系統和編程語言之上的應用程序提供服務。其主要工作原理是使用WSDL對服務進行統一描述,通過UDDI發布服務,利用SOAP訪問服務。
3 基于Web Service的會員驗證系統總體設計
本文通過采用Web Service技術,實現對會員的驗證,系統采用Asp.Net開發Web Serivice 技術。本系統主要實現的功能:用戶通過客戶端程序可以在線驗證用戶是否為會員,查詢時,向客戶端程序提供自己的賬號與密碼參數,客戶端獲取參數后向調用服務端驗證Web Servcie,由此Web Service實現對本地用戶數據庫的查詢驗證。系統要做以下3方面的內容設計:1)數據庫的設計;2)服務端創建的Web Service,該服務提供會員信息查詢的接口;3)客戶端的調用程序,該程序調用服務端提供的驗證Web Service,實現會員驗證。整個系統是基于Web Service的松散結構,可以順利實現異構系統間跨越防火墻通信與互操作。系統示意圖如圖1所示。

1)會員信息數據庫。系統數據庫主要是存儲會員的認證信息,由于本文主要研究內容是通過會員驗證系統模型實現基于Web Service訪問遠程數據,因此,此數據庫設計比較簡單:在Sql Server數據庫中建立會員信息表,其主要字段有賬號、密碼、姓名等,其中關鍵字為賬號。
2)Web Service服務端。系統中提供的驗證Web服務是本文研究的核心,這里提供了一個基于Asp.net技術開發出來的會員驗證服務ValidateWebService。此服務對內通過Ado.net直接連接后臺的數據庫,對外通過Internet發布Web服務,提供的數據接口有2個調用參數——賬號和密碼。當客戶端程序調用時,如果驗證通過,返回true,否則1。
3)客戶端。Web Service的客戶端可以是任意的組件、應用程序或一個動態網頁程序。在訪問Web Service時,用戶只需要在代碼中調用代理類的相應方法即可,如同調用本地類的方法一樣。本文中的系統客戶端采用VB.Net開發一個客戶端程序實現ValidateWebService的調用,并且是通過靜態方法調用,一旦Web Service發布后,就獲得一個固定的URL,所有要用此服務獲得數據的客戶端通過此固定的URL在本地生成代理層,每次客戶端對遠程數據庫的訪問,都會通過這一代理層調用遠程方法獲取數據,返回請求客戶。其訪問過程如圖2所示。

4 運用Web Service技術開發會員驗證系統
根據前文分析,把系統劃分為3個層次:數據層、服務層和客戶層。其中,數據層由于只是記錄會員的基本信息,在實現時只需建立對應的數據信息表。因此,文中主要介紹基于ASP.Net開發系統中的驗證服務ValidateWebService和客戶端調用此服務的實現。
1)Web服務端的實現。首先,在Microsoft Visual Studio.Net2005環境中建立一個ValidateWebService,并在此系統中定義一個封裝服務功能的類ValidateWebService。該服務提供用戶對個人信息的查詢,在這個服務模塊中設立用戶接口,負責管理Web服務與用戶之間的交互。該類應當是公共的,并且可以隨意地從 Web Service 基類繼承。在這個類中設計ValidateUserinfo函數,它是實現驗證的核心模塊:
[HTK]WebMethod()> _
Public Function ValidateUserinfo(ByVal username As String, ByVal password As String) As Boolean
'調用個人信息查詢,連接數據庫
……
' 驗證username , password 字段身份有效性
If ('如果驗證通過) Then
Return True
Else
Return False
End If
End Function
在.Net體系結構里,Web 服務文件以.asmx文件擴展名保存,與.aspx 文件一樣,這些文件也在服務請求發出(后面的請求由緩存的預編譯type對象服務)時由ASP.Net 運行庫自動編譯,并創建相應的Web服務描述WSDL。本系統將ValidateWebService發布到服務器上,使用 Web 瀏覽器,然后就可以輸入該服務的URL,如http://202.204.215.191/somefolder/ValidateWebService.asmx wsdl,返回該服務的Web服務描述語言WDSL文檔。在這個文檔中,可以清楚地看出ValidateWebService發布在互聯網中的接口參數。以下是ValidateWebService服務描述WSDL文檔片斷:
<wsdl:types>
<s:schema elementFormDefault=“qualified” targetNamespace=“http://tempuri.org/”>
<s:element name=“ValidateUser”>
<s:complexType>
<s:sequence>
<s:element minOccurs=“0” maxOccurs=“1” name=“username” type=“s:string”/>
<s:element minOccurs=“0” maxOccurs=“1” name=“password” type=“s:string” />
</s:sequence>
</s:complexType>
</s:element>
<s:element name=“ValidateUserResponse”>
<s:complexType>
<s:sequence>
<s:element minOccurs=“1” maxOccurs=“1” name=“ValidateUserResult” type=“s:boolean”/>
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
2)客戶端。Web 服務最大的特點就在于它的松散耦合性,每個Web 服務都封裝了離散的功能,完成單個的任務,并且可以在其他程序中自由訪問調用,在代碼級與其他軟件進行集成。在訪問Web Service時,代理類和.Net Framework完成主要工作,用戶只需在代碼中調用代理類的相應方法即可。因此,在客戶端,首先運用.Net的SDK提供Web服務描述語言工具(WSDL.exe)的工具。此命令行工具用于從 WSDL 創建代理類,這里輸入WSDL http://202.204.215.191/somefolder/ValidateWebService.asmx wsdl,創建一個客戶端的代理類ValidateService.VB。
本系統中的客戶端采用了Windows Forms 形式,客戶端界面要求輸入用戶名稱和密碼。當用戶運行客戶端程序時,系統給出一個傳統的Windows風格的登陸界面,如圖3所示,一旦點擊驗證按鈕,客戶端就會通過本地的代理類去調用遠程的ValidateWebService。

在此按鈕事件中添加如下代碼,實現會員驗證。
Public Sub Submit_Click(Sender As Object, E As EventArgs)
'調用本地代理類,實現遠程調用
Dim Service As ValidateService=New ValidateService()
'進行驗證
Dim result As Boolean=Service.ValidateUserinfo(txtUser.Text,txtPwd.Txt)
'處理驗證結果
If result then
……
Else
……
End If
End Sub
這樣就完成了具有會員驗證Web服務的客戶端。
5 結束語
Web Service是一個嶄新的面向服務的分布式計算模型,它的優勢不像傳統的組件技術那樣依賴特定對象模型協議,而是建立在一些通用協議之上(SOAP、XML等)。本文結合具體的實例,通過一個會員驗證系統模型的設計和實現,并以.Net開發環境開發實現了該系統,驗證了運用Web Service技術可以實現對遠程數據庫的訪問。