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