[摘要] 本文首先闡述了.NET Remoting技術的基本原理和框架。針對目前旅游行業的電子商務平臺架構的缺陷,本文研究與設計了一套基于.NET Remoting技術的分布式旅游管理平臺解決方案。該平臺基于多用戶、高并發的特性,結合XML技術,使應用服務與Web服務器分離,為分布式的業務應用提供了高效可靠的架構。最后,介紹了該平臺的代碼實現。
[關鍵詞] 旅游管理平臺; 分布式; .NET Remoting技術; XML技術
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2011 . 18. 045
[中圖分類號]F270.7 [文獻標識碼]A [文章編號]1673 - 0194(2011)18- 0067- 03
0引言
隨著當今電子商務的快速發展和旅游行業業務的不斷拓展,人們越來越依賴網絡在線完成旅游相關事宜,這就給旅游行業的從業者提出了新問題。當用戶規模到達一定數量級時,原先的簡單架構已經不能滿足日益增長的用戶群在線操作的需求,搭建一個穩健的、易擴展的旅游管理平臺迫在眉睫。
本文針對目前普通的旅游行業電子商務平臺架構的缺陷,研究與設計了一套性能較高、易于擴展的旅游管理平臺解決方案,該管理平臺通過基礎數據和核心業務的發布與管理集成,再結合系統權限管理,實現旅游業務數據的及時性和共享性。
1.NET Remoting技術介紹
1.1.NET Remoting概述
.NET Remoting是微軟公司推出的遠程服務框架,是構建分布式應用程序的一種編程模式,它提供了在不同應用程序域之間通過調用遠程對象而進行交互的技術框架,能使信息在不同計算機、進程間遠程傳輸[1]。
1.2.NET Remoting技術框架
.NET Remoting中的遠程基礎結構由代理(Proxy)、通道(Channel)和消息(Formatter)組成。代理是指模仿遠程對象的本地對象,通道對象代表了本程序到遠程應用程序的連接,每個通道對象都包含了一個將方法調用轉換為已知格式的消息格式化程序對象,然后將消息發送到遠程服務器上,客戶端通道對象鏡像在這個服務器上可以偵聽請求。其技術框架如圖1所示。
2旅游管理平臺的解決方案
2.1旅游管理平臺概述
旅游管理平臺分為兩大部分:旅游業務管理系統和門戶網站系統(如圖2所示)。其中,旅游業務管理系統包括:核心業務管理(旅游線路管理、訂單管理、在線支付、業務統計、客戶管理和財務管理等)和基礎管理(用戶管理、酒店管理、信息管理)模塊;門戶網站系統包括:業務信息發布和系統管理等模塊。
2.2旅游管理平臺框架設計
該旅游管理平臺采用以.NET Remoting技術框架為核心的多層架構,包括服務端、客戶端兩大部分,如圖3所示。服務端和客戶端通過代理(Proxy)與通道(Channel)實現通信,具體業務由服務端對應代理和接口完成。服務端負責接收客戶端的請求,解析指令,訪問數據庫,并將結果返回到客戶端;而客戶端負責接收客戶指令發送到服務端,并接受服務端返回的結果等。
2.2.1服務端
(1) 數據層:實現對所有業務數據、基礎數據進行統一管理,采用數據庫管理系統SQL Server 2005實現。
(2) 應用服務層:實現對前端請求服務的管理和所有應用系統的業務邏輯的處理,包括:旅游線路查詢、酒店預訂、票務服務等應用功能。
2.2.2客戶端
(1) 表示層:表示層完成前端瀏覽器的控制流程,利用標準的C#、 HTML、XML技術實現前后臺的連接管理,利用ASP.NET機制實現頁面流程的控制以及頁面請求的分發。
(2) 客戶層:客戶層從表示層下載應用界面并在瀏覽器中顯示,只需安裝瀏覽器即可。
2.3旅游平臺的代碼實現
下面從.NET Remoting技術角度闡述旅游管理平臺的主要實現環節,整個平臺由Remoting服務端和客戶端構成。本系統采用服務器端注冊通道、客戶端激活通道的方式,而具體的業務由專門的業務類來實現。
2.3.1服務器端的實現
服務端具體業務方法通過(lyzx.Services.Interface.dll)接口來實現其在客戶端的代理調用,因該平臺有多個服務組成,所以該平臺引入了服務池概念(由HashTable構成的多個服務組合),通過服務端配置文件(XML)配置各個服務的通道類型、IP、Port、服務名稱等。
服務端通道注冊代碼如下(其中chnl為服務端監聽端口):
ChannelServices.RegisterChannel(chnl, false);
LineService objSOService = (ILineService)LineServiceFactory.Create(objRemotingService.URL,typeof(ILineService));
服務端發布通道的服務代碼如下(其中采用加鎖的機制保持線程的同步):
public static object Create(string url, Type serviceObjType)
{return RuntimeHelpers.GetObjectValue (Activator.GetObject(serviceObjType, url));}
public static string GetRemoteServiceURL(string channel, string ip, string port)
{return string.Format ("{0}://{1}:{2}/{3}", channel, ip, port, GetServiceUri(null));}
public static string GetServiceUri(Type serviceObjType)
{return "lineservice.rem";}
2.3.2客戶端的實現
客戶端激活通道,并根據配置文件(XML文件,主要針對.NET Remoting服務器的信息、各個服務進行配置)中所配置的通道類型(INTEGRATEDSEARCH_CHANNEL)、服務器IP(INTEGRATEDSEARCH_IP)、Port(INTEGRATEDSEARCH_PORT)以及通道類型(Line_URI)獲取對應服務。
客戶端激活通道對象代碼實現如下:
public static object Create(string url, Type serviceObjType)
{return Activator.GetObject (serviceObjType, url);}
public static string GetRemoteServiceURL(string channel, string ip, string port, string uri)
{return string.Format ("{0}://{1}:{2}/{3}", channel, ip, port, uri);}
public static string GetServiceUri()
{return "lineservice.rem";}
對應具體業務服務如下:
public static ILineService CreateClient()
{ILineService objService = ServiceFactory.Create(
ServiceFactory.GetRemoteServiceURL(
PortalConfig.INTEGRATEDSEARCH_CHANNEL,PortalConfig.INTEGRATEDSEARCH_IP,PortalConfig.INTEGRATEDSEARCH_PORT,PortalConstants.Line_URI), typeof(ILineService)) as ILineService;
return objService;}
2.2.3遠程對象的實現
系統中采用了接口概念,接口的實現類完成參數的驗證,訪問數據庫,并且返回查詢結果。由于Remoting傳遞的對象是以引用的方式,因此所傳遞的遠程對象類必須繼承MarshalByRefObject。遠程對象,也就是本系統的各個服務,它們是該平臺的主要功能部分,主要包含線路服務(Line Service)、訂單服務(Ticket Service)、酒店服務(Hotel Service)和其他一些基本服務等。
下面以線路查詢為例,簡單介紹遠程對象在.NET Remoting中的實現過程。由于數據較多,所以采用數據庫分頁技術,第一個參數是輸入輸出參數,是多個簡單條件組合的xml字符串。model_xml為輸入輸出型,顯示輸入為條件,輸出為結果。輸入時為多個簡單條件組合的xml字符串;輸出時也是多個記錄組成的xml串的結果集。
服務端代碼如下:
public interface ILineService
{int LineInfoList(ref string model_xml, int pageindex, int pagesize, ref int recoadcount);}
前已述及,客戶端通過服務端提供的并且已經實現的遠程對象封裝類接口[lyzx.Services.Interface.dll]獲得服務端方法,以線路中的[LineInfoList]方法舉例,其中第一個參數同上。
public static int LineInfoList(ref string model_xml, int pageindex, int pagesize, ref int recoadcount)
{return CreateClient().LineInfoList (ref model_xml, pageindex, pagesize, ref recoadcount);}
3結束語
本文首先闡述了.NET Remoting技術的基本原理和框架,并詳細介紹了基于.NET Remoting技術的分布式旅游管理平臺設計與實現的解決方案。該平臺基于多用戶、高并發的特性,使應用服務與Web服務器分離,為分布式的業務應用提供了高效可靠的架構。通過使用.NET Remoting技術框架,能夠方便地解決數據和命令的遠程傳遞問題,使系統中對數據的各種操作變得高效、可靠,同時易于解決數據的完整性和一致性問題。
另外,由于客戶端和宿主服務程序是松耦合關系,當需求發生變化時,只需要單獨更改服務宿主程序或客戶端即可以滿足要求,避免了因系統升級等引起的煩瑣部署及系統結構調整問題,為系統的完善升級奠定了良好的設計基礎。
主要參考文獻
[1] 王玉時,于曉明. 用.Net Remoting技術實現酒店管理系統友情查詢功能[J]. 陜西科技大學學報:自然科學版,2008,26(2):110-113.
[2] 曾登高. NET系統架構與開發[M]. 北京:電子工業出版社,2003.
[3] [美]Matthew MacDonald.Microsoft.NET分布式應用程序:集成XML Web服務與.NET遠程處理[M]. 戢中東,譯. 北京:清華大學出版社,2005.
[4] 胡海路,彭接文,胡智宇,等. XML Web Services高級編程范例[M]. 北京:電子工業出版社,2003.
[5] [美]Mclean S.Microsoft .Net Remoting權威指南[M]. 張昆琪,譯. 北京:機械工業出版社,2003.
[6] [意]Dino Esposito. Microsoft .Net XML程序設計[M]. 寧建平,譯. 北京:機械工業出版社,2003.