摘 要:分析COM/DCOM組件技術(shù)的結(jié)構(gòu)和基本特點,分析基于DCOM的多層應(yīng)用實現(xiàn)的過程。COM/DCOM是Microsoft提出的主流組件體系,COM提供一套允許同一臺計算機上的客戶端和服務(wù)器之間進行通信的接口,DCOM是組件技術(shù)COM的無縫擴展,可以將基于COM的應(yīng)用、組件、工具以及知識轉(zhuǎn)移到標準化的分布式計算領(lǐng)域中,當(dāng)做分布式計算時,DCOM用于處理網(wǎng)絡(luò)協(xié)議的低層次的細節(jié)問題。給出的實例對基于COM/DCOM的多層分布式模型進行了具體應(yīng)用,并取得較好效果。
關(guān)鍵詞:COM;DCOM;分布式;多層結(jié)構(gòu)
Application of Multilayer Distributing Model Based on COM/DCOM
YU Xi
(chool of Information and cience,Chengdu University,Chengdu,610106,China)[J12/3]
Abstract:he paper analyzes the construction and basic characters of COM/DCOM component technology,and also analyzes the procedure that base on the DCOM′s multilayer applicationCOM/DCOM is a mainstream discreteness system which Microsoft Corporation advanced,COM provids a set of interface that allow client-side and server-side in a computer to communicateDCOM is the extend of COM,the application,components,tools and knowledge based on the COM can be migrated to the area of standard distributing calculationDCOM can be used to deal with the details of the low layer in the network protocolhe presented example which based on the COM/DCOM multilayer distributing model gets good effect in the application
Keywords:COM/DCOM;distributing model;multilayer structure[J12/3]
1 引 言
隨著應(yīng)用系統(tǒng)軟件的需求變化和軟件規(guī)模的增大,要求軟件在開發(fā)過程中既要考慮功能,也要求開發(fā)周期縮短,從而對軟件結(jié)構(gòu)及開發(fā)模式及方法不斷提出新的要求。其中基于組件的軟件開發(fā)方法已經(jīng)逐步成為主要方法之一,它可以縮短軟件開發(fā)的時間,節(jié)約開發(fā)投入的經(jīng)費,提高程序員開發(fā)軟件的效率,形成更規(guī)范更穩(wěn)定的應(yīng)用軟件。而COM(Component Object Model)組件對象模型是由微軟倡導(dǎo)的組件技術(shù)的主流,是微軟為了發(fā)展OLE技術(shù),實現(xiàn)組件包裝機制,跨語言互操作機制而設(shè)計的。程序員可以通過大量的開發(fā)工具開發(fā)COM服務(wù)器對象和基于COM/DCOM的分布式應(yīng)用。
2 COM/DCOM組件基本原理
21 COM組件
是目前使用主流的組件體系結(jié)構(gòu),采用IDL接口定義語言描述COM組件接口,以提供給外界訪問。IDL實現(xiàn)應(yīng)用程序?qū)OM接口訪問的語言和平臺的無關(guān)性。微軟在此基礎(chǔ)上還提供了一些高級服務(wù),如微軟事務(wù)服務(wù)(Microsoft ransaction ervice,M)、微軟消息隊列服務(wù)(Microsoft Message Qqeuing ervice,MMQ),以支持開發(fā)企業(yè)級多層應(yīng)用系統(tǒng)。這些工具和服務(wù)與COM這樣的成熟組件模型分工合作,能夠開發(fā)出復(fù)雜的多層系統(tǒng),效率得到了很大程度的提高。
22 DCOM組件
為了支持局域網(wǎng)、廣域網(wǎng)甚至是Internet上不同計算機對象之間的通信,DCOM對COM進行了擴展。DCOM技術(shù)就是將COM技術(shù)移植到網(wǎng)絡(luò)上并在網(wǎng)絡(luò)中應(yīng)用,這樣用戶可以將COM服務(wù)器安裝在一臺機器上,而把訪問服務(wù)器的客戶程序放置在其他連網(wǎng)的機器上,實現(xiàn)COM對象的遠程訪問。DCOM成為業(yè)界擴展早期C/應(yīng)用和編寫多層數(shù)據(jù)庫應(yīng)用程序的首選技術(shù),應(yīng)歸結(jié)為DCOM的以下特點:
(1) 可重用性
面向組件技術(shù)比面向?qū)ο蠹夹g(shù)具有更成功的重用性。其中組件的可插用性和可維護性使程序員能夠更好地重用代碼,提高開發(fā)效率。同時DCOM直接和透明地利用COM的技術(shù)和開發(fā)工具,可以降低開發(fā)時間,原來熟悉COM的程序員也能夠很容易的將原有COM的知識應(yīng)用到DCOM中。
(2) 位置無關(guān)性
無論DCOM組件和客戶進程是否存在于同一臺主機,客戶連接對象和調(diào)用對象的形式都完全一樣。DCOM對象提供外界訪問的接口,至于它安裝在哪臺計算機并不重要,外界客戶應(yīng)用程序只需要指明連接的服務(wù)器名通過DCOM協(xié)議就可以訪問這些接口提供的方法,如果服務(wù)器有變動,只要將客戶端連接的服務(wù)器指向該服務(wù)器就可以,所以位置無關(guān)性還有利于動態(tài)平衡應(yīng)用服務(wù)器的負載。
(3) 語言無關(guān)性
COM/DCOM提供一種IDL接口描述語言將定義接口使用的語言和定義實現(xiàn)使用的語言分離開。COM/DCOM組件對象可以在一種語言下實現(xiàn),而在另一種語言實現(xiàn)的應(yīng)用程序中使用。通常任何一門語言都可以用來創(chuàng)建COM組件,而這些組件又可以被大量的語言和開發(fā)工具使用,包括Java,C++,VB,Delphi,PowerBuilder和COBOL等?;贒COM的語言無關(guān)性,不熟悉C/C++的程序員也可以編寫COM應(yīng)用,他們可以選擇自己熟悉的語言和工具進行開發(fā),增加了語言選擇的靈活性。
(4) 連接管理
DCOM使用一個有效的Ping協(xié)議來探測客戶是否仍然和對象建立連接。如果組件對象在超過3個Ping時間段沒有接受到來自客戶的消息,則DCOM就認為連接已經(jīng)終止。如果連接終止,DCOM減少一個引用計數(shù),如果引用計數(shù)器減為0則釋放該組件對象,其中引用計數(shù)的增加和減少是通過在IUNknown接口中定義的2個引用計數(shù)的方法:ADDREF()和RELEAE()來實現(xiàn)。當(dāng)客戶與組件建立連接時,DCOM就調(diào)用ADDREF()增加一個引用計數(shù)的值,當(dāng)客戶與組件斷開連接時,DCOM就調(diào)用RELEAE()減少一個引用計數(shù)的值。
從組件的角度看,不管客戶應(yīng)用是正常的斷開連接,還是因發(fā)生錯誤而導(dǎo)致斷開連接都是采用相同的計數(shù)機制,應(yīng)用通過使用分布式垃圾回收機制得到釋放。
() DCOM的安全性
DCOM使COM增強了大量的與安全性相關(guān)的補充功能。DCOM之前的COM體系已經(jīng)非常適用于分布式系統(tǒng),它允許客戶透明地訪問進程內(nèi)DLL和本地服務(wù)器。DCOM很自然地擴展COM以便使用對象RPC來實現(xiàn)它的基本傳輸功能,保留透明性是為了使客戶機無需擔(dān)心服務(wù)器是否是進程內(nèi),是本地的還是遠程的。DCOM為用戶身份認證、數(shù)據(jù)完整性和隱私性都提供了不同級別的支持。
3 DCOM開發(fā)多層應(yīng)用在Delphi中的實現(xiàn)
31 多層結(jié)構(gòu)簡介
典型的C/體系結(jié)構(gòu)中,數(shù)據(jù)庫的管理在一層中進行,其他所有的數(shù)據(jù)處理都在另一層完成,這樣給客戶端帶來很大的負擔(dān),也要求客戶機具有很強的處理能力。為了改善傳統(tǒng)C/的不足,出現(xiàn)了多層的體系結(jié)構(gòu),它將客戶端的處理分為應(yīng)用程序和業(yè)務(wù)邏輯處理,并將業(yè)務(wù)邏輯處理從客戶端推到中間層實現(xiàn)。典型的多層結(jié)構(gòu)如圖1所示。
多層分布式C/應(yīng)用程序在邏輯上劃分為多個部分,每一部分駐留在不同的機器上,這些機器可以在一個局域網(wǎng)內(nèi),也可以在Internet上。目前常見的多層結(jié)構(gòu)主要包括3部分:
(1) 客戶端應(yīng)用程序:在客戶機上顯示客戶應(yīng)用程序的用戶界面,由于只包含應(yīng)用界面所以又稱為表示層。
(2) 應(yīng)用程序服務(wù)器:包含了事務(wù)處理業(yè)務(wù)邏輯,為客戶端應(yīng)用提供數(shù)據(jù)服務(wù),由于處在客戶端和數(shù)據(jù)庫服務(wù)器之間又稱中間層或業(yè)務(wù)邏輯層,在對客戶機的連接上相當(dāng)于服務(wù)器,在與后臺數(shù)據(jù)庫服務(wù)器交互時又相當(dāng)于客戶機。
(3) 數(shù)據(jù)庫服務(wù)器:提供關(guān)系數(shù)據(jù)庫管理系統(tǒng)。
32 多層結(jié)構(gòu)工作流程
用戶首先啟動客戶應(yīng)用程序,客戶應(yīng)用程序嘗試使用DCOM連接應(yīng)用服務(wù)器,如果應(yīng)用服務(wù)器沒有啟動,客戶應(yīng)用程序就激活應(yīng)用服務(wù)器,并從中獲得IProvider接口。應(yīng)用服務(wù)器從遠程數(shù)據(jù)庫服務(wù)器獲得數(shù)據(jù)后,打包后經(jīng)IProvider接口提交給客戶應(yīng)用程序,客戶端通過ClientDataet從IProvider獲得打包數(shù)據(jù)后分解數(shù)據(jù)包,然后通過Data Control顯示或做相應(yīng)的處理。當(dāng)客戶端應(yīng)用向應(yīng)用服務(wù)器提出更新數(shù)據(jù)申請時,需要將數(shù)據(jù)封裝成數(shù)據(jù)包通過IProvider提交給應(yīng)用服務(wù)器,應(yīng)用服務(wù)器接受到請求后,先將數(shù)據(jù)分散解包,然后通過服務(wù)器事務(wù)管理向數(shù)據(jù)庫服務(wù)器申請更新數(shù)據(jù)。如果更新數(shù)據(jù)成功,客戶端將顯示更新后的數(shù)據(jù),如果由于某種原因數(shù)據(jù)不能正常更新,則客戶端應(yīng)用程序只有放棄或者重新嘗試更新,Delphi中實現(xiàn)多層結(jié)構(gòu)工作流程如圖2所示。
Delphi是由Borland公司開發(fā)的一個快速開發(fā)工具,使用Object Pascal作為實現(xiàn)語言。在創(chuàng)建COM/DCOM實現(xiàn)多層應(yīng)用程序開發(fā)方面,Delphi一直都是較優(yōu)的選擇。
33 編寫客戶端應(yīng)用程序
創(chuàng)建多層應(yīng)用程序的客戶端與創(chuàng)建2層應(yīng)用程序的客戶端沒有什么太大的區(qū)別,不同主要是在多層應(yīng)用程序的客戶端使用:
(1) DCOMConnection實現(xiàn)DCOM的連接。
(2) 與應(yīng)用程序服務(wù)器的DataProvider連接的ClientDataet組件,客戶端通過ClientDataet上的Dataource獲得數(shù)據(jù)。創(chuàng)建客戶應(yīng)用程序的基本步驟為:
① 使用File/New Application開始一個新的工程,設(shè)計客戶應(yīng)用程序界面;
② 使用File/Data Module加入1個數(shù)據(jù)模塊,在這個數(shù)據(jù)模塊中加入3個非可視組件 DCOMConnection,ClientDataet,Dataource;
③ 設(shè)置連接組件的參數(shù),包括設(shè)置DCOMConnection的erverName以指定應(yīng)用服務(wù)器名,設(shè)置ComputerName以指定應(yīng)用服務(wù)器所在的計算機名。設(shè)置ClientDataet的Remoteerver屬性以指定DCOM連接組件,設(shè)置ProviderName以指定應(yīng)用服務(wù)器上的DataetProvider組件,這樣客戶程序就可以通過IProvider接口與應(yīng)用服務(wù)器建立連接進而訪問數(shù)據(jù)庫服務(wù)器上的數(shù)據(jù),設(shè)置Dataource的Dataet以為窗體上的Data Control提供數(shù)據(jù)集。
34 編寫應(yīng)用服務(wù)器程序
創(chuàng)建應(yīng)用服務(wù)器和創(chuàng)建其他數(shù)據(jù)庫應(yīng)用程序的過程大致相同,主要的區(qū)別在應(yīng)用程序服務(wù)器中必須包括一個遠程數(shù)據(jù)模塊和數(shù)據(jù)供應(yīng)部件DataetProvider。創(chuàng)建應(yīng)用服務(wù)器的主要步驟為:
(1) 使用File/New Application建立一個應(yīng)用程序
(2) 使用File/New Other/Multitier/Remote Data Module添加遠程數(shù)據(jù)模塊,并在該遠程數(shù)據(jù)模塊上添加DataetProvider、ession、Dataet非可視組件
(3) 設(shè)置相關(guān)組件屬性,設(shè)置Dataet的DataBaseName以使數(shù)據(jù)集訪問數(shù)據(jù)庫,設(shè)置DataetProvider的Dataet以與數(shù)據(jù)集連接,設(shè)置ession組件的AutoessionName和KeepConnections為rue以防止訪問沖突。
(4) 注冊應(yīng)用服務(wù)器程序,應(yīng)用服務(wù)器是一個EXE,只需要運行一次就自動在系統(tǒng)中注冊。
4 DCOM多層應(yīng)用實例分析
下面是一個應(yīng)用系統(tǒng)示例,該多層結(jié)構(gòu)的學(xué)生選課系統(tǒng)是用Delphi實現(xiàn)的基于DCOM組件的多層應(yīng)用實例。鑒于學(xué)校選課的時間相對集中,要求系統(tǒng)具有較快的響應(yīng)速度,穩(wěn)定的性能,較快的數(shù)據(jù)處理能力。本系統(tǒng)采用多臺應(yīng)用服務(wù)器,實現(xiàn)動態(tài)負載,學(xué)生可以在校園網(wǎng)內(nèi)的任一一臺計算機上進行選課,結(jié)束以前學(xué)生選課完全靠手工操作的局面,大大提高學(xué)生選課的效率。圖3是該選課系統(tǒng)中面向?qū)W生的選課界面。在程序設(shè)計時主要考慮數(shù)據(jù)庫的設(shè)計和實現(xiàn)應(yīng)用服務(wù)器的動態(tài)負載和任務(wù)的遷移上。
數(shù)據(jù)庫設(shè)計方面,因為系統(tǒng)是學(xué)校教務(wù)系統(tǒng)的一部分,只需要添加以下一些數(shù)據(jù)表:
選課日志表 記錄學(xué)生登錄系統(tǒng)的一些信息包括登錄時間,所在計算機的IP等。
學(xué)生表 記錄學(xué)生登錄選課系統(tǒng)所需的密碼,ID,選課碼判斷是否已經(jīng)選擇過等。
選課表 記錄學(xué)生已經(jīng)選修的課程和學(xué)分。
選課課程表 可供全校學(xué)生選修的課程信息。
其他的表比如:教師信息表、學(xué)生信息表、學(xué)校專業(yè)表、學(xué)生所在專業(yè)的課程設(shè)置表、學(xué)生本期的課程表等等都是與教務(wù)系統(tǒng)的其他子系統(tǒng)共享的數(shù)據(jù)表,所以不必重復(fù)設(shè)置。
動態(tài)負載和任務(wù)遷移方面,為了讓學(xué)校上千的學(xué)生在相對集中的時間進行選課,本系統(tǒng)采用多臺計算機作為應(yīng)用服務(wù)器,為了實現(xiàn)和平衡它們之間的負載和當(dāng)其中某臺發(fā)生故障時遷移任務(wù),可以采取構(gòu)建一張記錄應(yīng)用服務(wù)器的數(shù)據(jù)表的辦法,每當(dāng)有學(xué)生要連接應(yīng)用服務(wù)器時就順序查找該數(shù)據(jù)表,確定可用的應(yīng)用服務(wù)器,如果找到就建立連接進行通信否則掛起,等待一個可以容忍的時間段(在這個過程中可能有其他同學(xué)放棄了應(yīng)用服務(wù)器的使用和其他應(yīng)用服務(wù)器重新可用)后再嘗試查找該表,重復(fù)上述操作。
結(jié) 語
DCOM是COM的一種表現(xiàn)形式,DCOM 實際上是一項協(xié)議,它能讓軟件組件以一種可靠、安全和高效的方式通過網(wǎng)絡(luò)進行直接通訊。DCOM 以前稱為“網(wǎng)絡(luò) OLE”,其設(shè)計使它能用在多種網(wǎng)絡(luò)傳輸(包括 P 等 Internet 協(xié)議)上。對DCOM來說,應(yīng)用系統(tǒng)可以將互相關(guān)聯(lián)的組件放到靠的比較近的機器上,甚至可以將它們放到同一臺機器上或同一個進程中。即使是由大量的小組件完成一個具有復(fù)雜邏輯結(jié)構(gòu)的功能,它們之間仍然能夠有效到相互作用。當(dāng)組件在客戶機上運行時,將用戶界面和有效性檢查放在客戶端或離客戶端比較近的機器上會更有意義。
通過示例可以看到,基于COM/DCOM的分布式系統(tǒng)開發(fā)具有很好的特性和效果。
參 考 文 獻
[1]Microsoft CorporationDCOM Architecture[EB/OL]http://wwwmicrosoftcom/com
[2]Microsoft CorporationDCOM echnical Overview[EB/OL]http://wwwmicrosoftcom/com
[3][美] Box DCOM本質(zhì)論[M]潘愛民,譯北京:中國電力出版社,2001
[4][美] Jason PritchardCOM與CORBA本質(zhì)與互用[M]徐金梧,譯北京:清華大學(xué)出版社,2002
陳銳Delphi分布式多層程序開發(fā)[M]北京:清華大學(xué)出版社,2002
[6]馮秀芳,張德賢基于DCOM的遠程教學(xué)系統(tǒng)開發(fā)[J]河南大學(xué)學(xué)報:自然科學(xué)版,2001,31(3):3-6
[7]李維Delphi深入COM編程[M]北京:機械工業(yè)出版社,2000
[8]李維Delphix ADO/M/COM+高級程序設(shè)計篇[M]北京:機械工業(yè)出版社,2000
[9]李維Delphi7分布式組件開發(fā)[M]北京:機械工業(yè)出版社,2003
[10]陳銳Delphi分布式多層應(yīng)用程序開發(fā)[M]北京:清華大學(xué)出版社,2002
作者簡介
于 曦,1973年出生,碩士,講師。研究方向為軟件工程。