王 俊,程顯生
WANG Jun, CHENG Xian-sheng
(內蒙古農業大學 職業技術學院,包頭 014109)
Web Service技術是應用程序通過內聯網或者因特網發布和利用軟件服務的一種標準機制,并能夠在應用程序和業務流程之間實現順暢的自動化信息交換機制,而不必考慮這些信息最初是由何種應用或平臺提供的。本文采用.NET作為應用程序平臺,使用三層體系結構實現數據層、Web服務層、用戶界面層和Web瀏覽器層的設計。服務器端應用程序設計利用Spring對hibernate進行事務管理和對象注入;通過XML序列化和反序列化實現持久化數據對象的方法實現為應用程序提供數據。
根據高校黨員管理[1]信息系統總體設計該系統的總體設計采用三層體系結構即B/S和C/S混合結構思路,在C/S結構中數據庫為一層稱為數據層,網絡信息服務IIS(Internet Information Server,IIS)為一層并稱其為Web服務層,在客戶機上運行的Windows窗體應用程序為一層并其稱為用戶界面層,完成與應用程序之間的對話任務。在B/S結構中,最后一層是客戶端的Web瀏覽器,它是以Web服務器作為系統的核心,通過擴展標記語言(Extensible Markup Language,XML)和簡單對象訪問協議(Simple Object Access Protocol,SOAP)提供應用程序邏輯或數據的方式,以一個單獨的Web Services文件存在。本系統的總體框架結構如圖1所示。

圖1 系統總體架構
依據該框架利用.NET Framework提供的System.Web.Service命名空間中的類創建Web服務,利用Web服務描述語言 (Web Service Description Language,WSDL)描述Web服務,描述信息指定了可以傳送給出Web服務的數據和可以調用的方法,要調用Web服務上的一個方法,必須轉換成為簡單對象訪問協議 (Simple Object Access Protocol,SOAP)信息。Web服務[2]能夠從WebService類中訪問IIS對象模型,在本系統中,Web服務在項目中顯示為一個引用,客戶端應用程序利用VS.NET IDE訪問Web服務;核心類庫是應用服務器實現的主要技術,核心類庫包括業務規則層、業務實體層和系統框架層。業務規則是驗證業務實體是否對相應的數據有訪問權限,確保整個系統的底層安全。業務實體層是利用Spring應用接口[3]提供對各個業務實體進行數據訪問功能,相當于為數據庫的數據包裝了一層殼,增加數據庫訪問的統一性,提高整個系統的安全性。系統框架層是讀取和設置整個系統的配置信息,記錄和管理系統日志,提供統一的底層功能。數據訪問層是為業務層提供數據訪問功能,作為數據庫與業務層的接口。通過Hibernate的映射文件完成數據庫表中數據的相互轉化。
服務器端應用程序開發主要采用Spring.net+Nhibernate+.Net 2.0 作為服務端的總體技術,實現Web應用服務器的設計即Web服務的設計。Web服務[4]借助于ASP.NET的Web窗體進行相關接口的設計。而Web服務的信息表示采用擴展標記語言(Extensible Markup Language,XML)。XML是Internet環境中跨平臺的,依賴于內容的技術,是當前處理結構化文檔信息的有力工具,是一種簡單的數據存儲語言,使用一系列簡單的標記描述數據,而這些標記可以用方便的方式建立,雖然XML占用的空間比二進制數據要占用更多的空間,但XML極其簡單易于掌握和使用。Web服務是XML應用領域之一。
Spring是指一個用于構造Java應用程序的輕量級框架,它的核心基于“控制反轉(Inversion of Control,IoC)”原理。根據系統總體框架結構,Spring完成業務邏輯即業務層的開發。
Hibernate是“對象—關系映射(Object—Relational Mapping,ORM)模塊實現數據持久層的一個優秀的Java組件。ORM組件主要功能是實現實體域對象的持久化并封裝數據訪問的細節。數據持久層是將數據對象與數據實體聯系起來,該系統中主要通過DAO和ORM組件[5]實現數據的持久化操作,如圖2所示。

圖2 通過DAO和ORM組件實現數據的持久化

圖3 面向數據的XML處理機制
DAO采用HibernateDaoSupport類開發。HibernateDaoSupport類提供相關的屬性和方法并進行封裝。為此直接使用HibernateTemplate進行數據對象的訪問和操作。通過XML[6]序列化和反序列化實現持久化數據對象的方法。XML序列化是將應用程序數據對象的公共屬性和字段轉換為XML文檔以便存儲或傳輸。反序列化則是從 XML 輸出中重新創建原始狀態的對象,最終將反序列化的數據對象轉換為應用程序數據。如圖3所示描述了面向數據的XML處理機制。
服務器端應用程序基于.NET Framework平臺設計,在Microsoft Visual Studio.NET 集成開發環境(以下簡稱VS.NET IDE)中,借助C#語言設計相關接口及程序。高校黨員管理信息系統運行在Windows2003操作系統上,并且必須安裝.NET Framework2.0和IIS6.0以上及SQL Server2005數據庫。
服務器端應用程序設計與實現使用VS.NET IDE開發。實現結果如下圖4所示。
該服務器端應用程序開發創建了七個項目內容,主要項目的功能如下:
1)E:…Web
該項目是Web服務層和基礎框架層的窗口。主要包括應用程序配置文件Web.config、Nhibernate數據訪問層配置文件Dao.xml、日志配置文件log4net.xml等,即Web層定義,數據訪問層定義、服務層定義。部分代碼如下:

圖4 服務器端應用程序開發的項目


2)Fire.GXDY.common
該項目是業務實體,主要完成數據訪問層填充實體數據的序列化和接收客戶端數據實體,并提供給數據訪問層。
3)Fire.GXDY.Dao
該項目是Nhibernate數據實體層主要是對實體定義,并完成Nhibernate的最終數據實體化.使用C#語言編寫Idepartment、ImemberINF、Irole等DAO接口。定義DAO接口的目的是聲明Department數據訪問對象的方法,方便Spring.net 將HibernateDeparmentDao類型的實例注入到DepartmentSrv類中。部分接口代碼如下:

4)Fire.GXDY.Dao.NHibernate
該項目是Nhibernate數據訪問層主要通過HibernateTemplate模塊完成數據的CRUD操作即繼承Idepartment接口,完成Nhibernate對Deaprtment數據實體的CURD操作。部分代碼如下:

5)Fire.GXDY.Service
該項目是整個程序的數據訪問層,主要對Nhibernate數據訪問層進行了封裝,加入了數據合法性等業務邏輯判斷功能。程序數據庫訪問層對Department對象操作相應接口,方便Spring.net將DepartmentSrv類型的實例注入到Web服務層。部分代碼如下:


6)Fire.GXDY.Util
該項目是程序通用層,主要完成程序配置信息的讀取,字符串加密解密并取得應用程序名和SoapHeader信息,為Web服務層的方法提供安全驗證的基礎信息。
7)FireService.asmx
該項目是Web服務層,它位于Web層內,以一個單獨Web Services文件存在。
Spring技術在該課題系統中主要解決依賴注入問題或稱為控制反轉,以減少耦合,Spring為應用程序的類提供所需依賴的實例,減少為連接應用程序的各個部件而編寫的大量代碼,主要精力集中于建立業務邏輯,這些業務邏輯以接口的形式存儲,同函數一樣被客戶端調用。Spring使用Hibernate實現數據訪問邏輯并將創建的接口以網頁形式顯示調用將實體序列化。

Web Service作為一個平臺,需要一套協議來實現分布式應用程序的創建。Web Service利用XML語言建立起一整套協議棧,解決了從服務的封裝到接口的描述問題。本文通過XML、SOAP、WSDL三項Web Service的關鍵技術。解決了高校黨員管理信息系統服務器端應用程序設計。使用XML傳遞Web服務的消息和數據流,SOAP解決跨平臺的傳輸問題,WSDL用來描述Web Service所提供的信息端口和服務。
[1] 胡長華.淺談高校黨員教育管理的難點與對策[J].學校黨建與思想教育,2005,(4):27-29.
[2] Ashish Banerjee,Aravind Corera.C#Web服務高級編程使用.NET Remoting和ASP.NET創建Web服務[M].北京:清華大學出版社,2002,234-265.
[3] 郭鋒.Spring 從入門到精通[M].北京:清華大學出版社,2007,230-260.
[4] 石雙元.Web應用開發技術[M].北京:清華大學出版社,2010,32-50.
[5] 陶勇.Hibernate ORM最佳實踐[M].北京:清華大學出版,2010,156-160.
[6] 王春楠.XML高級編程[M].北京:清華大學出版社,2009.256-350.