NET Remoting 在醫(yī)療保險(xiǎn)采集系統(tǒng)中的應(yīng)用與研究
以往北京醫(yī)療保險(xiǎn)采集系統(tǒng)遠(yuǎn)程訪問采用DCOM(分布式組件對(duì)象模型)技術(shù)。隨著系統(tǒng)版本的更新,采用DCOM技術(shù)的系統(tǒng)暴露出了大量的缺陷,如部署困難以及新舊版本更新時(shí)容易產(chǎn)生DLL地獄問題。.NET Remoting是DCOM的一種升級(jí)。它提供了一種允許對(duì)象通過應(yīng)用程序域與另一對(duì)象進(jìn)行交互的框架,并擴(kuò)展了通過遠(yuǎn)程訪問對(duì)象實(shí)現(xiàn)分布式應(yīng)用程序的模型。
1 .NET Remoting結(jié)構(gòu)及原理 1.1 本地過程調(diào)用原理
本地過程調(diào)用是通過棧實(shí)現(xiàn)的。系統(tǒng)調(diào)用過程前首先將過程的參數(shù)壓入到棧中,在過程被執(zhí)行時(shí)將棧中的參數(shù)取出作為過程的本地變量,并將其返回的結(jié)果壓入棧中,這樣就完成了一次過程的調(diào)用。如圖1所示。
1.2 遠(yuǎn)程過程調(diào)用原理
不同的應(yīng)用程序是無法共享同一個(gè)線程棧的,因此不同的應(yīng)用程序之間的過程調(diào)用應(yīng)當(dāng)采用基于消息的調(diào)用機(jī)制。在客戶端通過代理對(duì)象將過程調(diào)用信息封裝到一個(gè)消息對(duì)象中,再根據(jù)需要將這些消息對(duì)象轉(zhuǎn)化成某個(gè)格式的數(shù)據(jù)流發(fā)送到遠(yuǎn)程對(duì)象所在的應(yīng)用程序域中。當(dāng)經(jīng)過格式化的消息到達(dá)服務(wù)器后,首先從消息中還原出對(duì)象,之后在遠(yuǎn)程對(duì)象所在的應(yīng)用程序域中構(gòu)建出相應(yīng)的過程調(diào)用棧,此時(shí)就可以按照傳統(tǒng)的基于棧的過程調(diào)用機(jī)制完成過程的調(diào)用,返回結(jié)果的傳遞則按照之前的方法反向重復(fù)一遍。如圖2所示。
1.3 .NET Remoting 體系結(jié)構(gòu)
.NET Remoting 服務(wù)器應(yīng)用程序域由傳輸通道、序列化格式器,服務(wù)端對(duì)象組成,客戶端應(yīng)用程序域由客戶端對(duì)象、代理、傳輸信道、序列化格式器組成??蛻舳舜碡?fù)責(zé)在客戶端處理基于棧的參數(shù)傳遞模式到基于消息的參數(shù)傳遞模式的轉(zhuǎn)換。格式化器負(fù)責(zé)將消息對(duì)象轉(zhuǎn)換成可在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)流,并將其發(fā)送到服務(wù)器。透明代理是遠(yuǎn)程對(duì)象的精確副本,真實(shí)代理接受透明代理創(chuàng)建的消息并將其通過信道傳遞到遠(yuǎn)程對(duì)象。.NET Remoting 體系結(jié)構(gòu)如圖3所示。
2 應(yīng)用.NET Remoting 開發(fā)分布式系統(tǒng)模型
分布式程序由若干個(gè)可以獨(dú)立執(zhí)行的程序模塊組成,它們分布于一個(gè)分布式處理系統(tǒng)的多臺(tái)計(jì)算機(jī)上被同時(shí)執(zhí)行。它有兩個(gè)特點(diǎn):分布性和通信性。開發(fā)分布式系統(tǒng)首先是系統(tǒng)應(yīng)用層次的劃分,N層應(yīng)用程序?qū)?shù)據(jù)庫服務(wù)、業(yè)務(wù)邏輯與用戶界面分開。這樣不僅實(shí)現(xiàn)了不同功能模塊的分布式執(zhí)行從而提高了系統(tǒng)得可擴(kuò)展性同時(shí)也在保證客戶端功能的前提下,為用戶提供一個(gè)簡(jiǎn)潔的界面因此在應(yīng)用程序修改時(shí)只需要對(duì)應(yīng)用服務(wù)器進(jìn)行修改,而不用修改客戶端應(yīng)用程序,從而簡(jiǎn)化了應(yīng)用系統(tǒng)的開發(fā)、更新和升級(jí)工作。應(yīng)用.NET Remoting 開發(fā)N層分布式系統(tǒng)模型如圖4所示。
圖4 .NET Remoting開發(fā)分布式系統(tǒng)模式
3 北京醫(yī)療保險(xiǎn)數(shù)據(jù)采集系統(tǒng)的開發(fā) 3.1 北京醫(yī)療保險(xiǎn)數(shù)據(jù)采集系統(tǒng)體系結(jié)構(gòu)
醫(yī)療保險(xiǎn)數(shù)據(jù)采集系統(tǒng)主要實(shí)現(xiàn)各區(qū)、街道及公司的參加醫(yī)療保險(xiǎn)人員的信息采集。系統(tǒng)由數(shù)據(jù)采集客戶端、數(shù)據(jù)處理服務(wù)器、數(shù)據(jù)存儲(chǔ)服務(wù)器及安全服務(wù)器四部分組成如圖5所示。系統(tǒng)各部分的功能如下:
(1) 數(shù)據(jù)采集客戶端:各街道、區(qū)的主要負(fù)責(zé)人通過數(shù)據(jù)采集客戶端匯總本地區(qū)的參加醫(yī)療保險(xiǎn)人員的基本信息。
(2) 業(yè)務(wù)處理服務(wù)器:匯總的人員信息通過業(yè)務(wù)處理服務(wù)器完成數(shù)據(jù)的處理。如在人員信息修改時(shí)完成數(shù)據(jù)的更新、報(bào)盤。
(3) 數(shù)據(jù)存儲(chǔ)服務(wù)器:完成數(shù)據(jù)的存儲(chǔ)與一致性校驗(yàn)。
(4) 系統(tǒng)安全服務(wù)器:保障數(shù)據(jù)采集系統(tǒng)的安全。
圖5 醫(yī)療保險(xiǎn)數(shù)據(jù)采集系統(tǒng)體系結(jié)構(gòu)
3.2 .NET Remoting在數(shù)據(jù)采集系統(tǒng)中的應(yīng)用
3.2.1 異構(gòu)數(shù)據(jù)庫訪問
圖6 數(shù)據(jù)訪問結(jié)構(gòu)
異構(gòu)數(shù)據(jù)庫訪問包括兩個(gè)層:訪問邏輯層、數(shù)據(jù)庫訪問層。訪問邏輯層負(fù)責(zé)完成數(shù)據(jù)訪問時(shí)用到的標(biāo)準(zhǔn)SQL語句的編碼并調(diào)用數(shù)據(jù)訪問層中的方法及通過應(yīng)用.NET Remoting 技術(shù)對(duì)外提供遠(yuǎn)程對(duì)象。數(shù)據(jù)訪問層負(fù)責(zé)完成異構(gòu)數(shù)據(jù)庫的訪問。這樣的設(shè)計(jì)結(jié)構(gòu)在很大程度上實(shí)現(xiàn)了異構(gòu)數(shù)據(jù)庫的統(tǒng)一管理與訪問。如圖6所示。
3.2.2 實(shí)現(xiàn)遠(yuǎn)程對(duì)象
訪問邏輯層中的對(duì)象通過.NET Remoting技術(shù)實(shí)現(xiàn)為遠(yuǎn)程對(duì)象。實(shí)現(xiàn)方法如下:
namespace Capinfo.Bjmedicare.DataCollection.SqlService
{
public class ParamService :MarshalByRefObject,IParamService
{ //實(shí)現(xiàn)數(shù)據(jù)訪問邏輯的方法
public DataSet GetParameterDataSet(string tableName)
{…
配置文件:
<service>
<wellknown mode="SingleCall" type="Capinfo.Bjmedicare.DataCollection.SqlService" objectUri="CommonService.rem"/>
</service>…
3.2.3 客戶端訪問
客戶端訪問遠(yuǎn)程對(duì)象通過兩個(gè)層訪問。ServiceFactory 層實(shí)現(xiàn)遠(yuǎn)程對(duì)象的激活,并返回遠(yuǎn)程對(duì)象的引用。Facade層采用界面模式包裝ServiceFactory層返回的遠(yuǎn)程對(duì)象并通過自身定義的方法統(tǒng)一調(diào)用遠(yuǎn)程對(duì)象的方法訪問數(shù)據(jù)庫從而為業(yè)務(wù)邏輯層提供服務(wù)。如圖7所示。
圖7 客戶端訪問遠(yuǎn)程對(duì)象結(jié)構(gòu)
4 結(jié)束語
通過本文的介紹可以看出.NET Remoting 技術(shù)具有很強(qiáng)的靈活性和可擴(kuò)展性。它提供新的解決分布式系統(tǒng)的方法。在實(shí)現(xiàn)醫(yī)療保險(xiǎn)數(shù)據(jù)采集系統(tǒng)中,應(yīng)用.NET Remoting 避免了應(yīng)用DCOM帶來的部署及版本更新時(shí)遇到的問題,提高了系統(tǒng)得可靠性、可擴(kuò)展性及易于維護(hù)??傮w上取得了較好的效果。
參考文獻(xiàn)
[1]譚政,蔡明.基于XML 與.NET Remoting的分布式異構(gòu)數(shù)據(jù)庫轉(zhuǎn)化.微計(jì)算機(jī)信息,2006,22(7-3):230
[2] 李玉凱,朱有產(chǎn),秦金磊..NET Remoting 及其在SCADA主站系統(tǒng)中的應(yīng)用.計(jì)算機(jī)工程,2006,32(19):246
[3]李東升..NET Remoting 在分布式數(shù)據(jù)庫查詢中的應(yīng)用.蘇州市職業(yè)大學(xué)學(xué)報(bào),2006,17(2):70
[4]蔡躍進(jìn),王美清.基于.NET Remoting 的通用分布計(jì)算模型,福州大學(xué)學(xué)報(bào),2006,34(5):652
更多醫(yī)療電子信息請(qǐng)關(guān)注:21ic醫(yī)療電子頻道