DCOM的分布式體系結(jié)構(gòu)及實(shí)現(xiàn)機(jī)制分析_第1頁(yè)
DCOM的分布式體系結(jié)構(gòu)及實(shí)現(xiàn)機(jī)制分析_第2頁(yè)
DCOM的分布式體系結(jié)構(gòu)及實(shí)現(xiàn)機(jī)制分析_第3頁(yè)
DCOM的分布式體系結(jié)構(gòu)及實(shí)現(xiàn)機(jī)制分析_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第六講 DCOM的分布式體系結(jié)構(gòu)及實(shí)現(xiàn)機(jī)制分析本講從遠(yuǎn)程調(diào)用角度,將DCOM體系結(jié)構(gòu)分成基本編程構(gòu)架、遠(yuǎn)程構(gòu)架和線路協(xié)議構(gòu)架三層,并分析了它們的工作機(jī)制和實(shí)現(xiàn)策略。1引言DCOM(Distributed Component Object Model)是微軟提出的一種分布式組件對(duì)象模型,它是COM在分布式計(jì)算方面的擴(kuò)展,使COM跨越機(jī)器的邊界,進(jìn)一步應(yīng)用于局域網(wǎng)、廣域網(wǎng),以及Internet上。為了適應(yīng)網(wǎng)絡(luò)環(huán)境,DCOM主要的任務(wù)是在COM的基礎(chǔ)上,實(shí)現(xiàn)遠(yuǎn)程調(diào)用,并采取一些策略,以適應(yīng)和優(yōu)化網(wǎng)絡(luò)環(huán)境。2DCOM的體系結(jié)構(gòu)DCOM在標(biāo)準(zhǔn)的分布式計(jì)算環(huán)境(DCE)RPC引擎之上,擁有DCE提供的通用

2、服務(wù)集,如遠(yuǎn)程過(guò)程調(diào)用(RPC:Remote Procedure Calls),命名,線程管理,以及安全性等。DCOM對(duì)DCE RPC進(jìn)行面向?qū)ο蟮臄U(kuò)展,故又稱對(duì)象RPC(ORPC)。DCOM運(yùn)行于網(wǎng)絡(luò)的最高層,相當(dāng)于ISO OSI中的應(yīng)用層,它具有協(xié)議無(wú)關(guān)性,可以使用TCP/IP、UDP、IPX/SPX,以及NetBIOS等底層面向連接或無(wú)連接協(xié)議。從遠(yuǎn)程調(diào)用角度,將該層網(wǎng)絡(luò)協(xié)議細(xì)分成三層,分別為基本編程構(gòu)架、遠(yuǎn)程構(gòu)架和線路協(xié)議構(gòu)架,三層緊密結(jié)合形成一個(gè)完整的體系結(jié)構(gòu)(如圖1所示)。2.1基本編程構(gòu)架雖然DCOM組件與客戶是跨機(jī)器通信,但對(duì)于客戶程序而言,服務(wù)組件所處的位置是透明的。因此,編

3、程者不必編寫(xiě)任何處理遠(yuǎn)程調(diào)用的代碼,也就是說(shuō)客戶程序不必知道服務(wù)組件運(yùn)行于本地或遠(yuǎn)程機(jī)器上,只須在配置的組件信息中加入或在程序代碼中指定遠(yuǎn)程組件所在服務(wù)器的名字;而且可以充分利用基于COM的應(yīng)用、組件、開(kāi)發(fā)工具以及知識(shí)來(lái)創(chuàng)建DCOM組件。當(dāng)客戶創(chuàng)建組件對(duì)象時(shí),只要知道對(duì)象的CLSID,并調(diào)用CoCreateInstance或CoGetClassObject函數(shù),COM運(yùn)行庫(kù)就會(huì)根據(jù)組件配置信息中提供的遠(yuǎn)程服務(wù)器名字,通過(guò)下面的兩層構(gòu)架,在遠(yuǎn)程服務(wù)組件中創(chuàng)建類工廠對(duì)象,進(jìn)而創(chuàng)建所要的組件對(duì)象。2.2遠(yuǎn)程構(gòu)架DCOM將COM的進(jìn)程透明性拓展為位置透明性,該層結(jié)構(gòu)沿襲了COM中的代理/存根和列集/散

4、集機(jī)制。當(dāng)客戶程序調(diào)用組件對(duì)象的成員函數(shù)時(shí),它實(shí)際上是調(diào)用了本進(jìn)程內(nèi)代理對(duì)象的對(duì)應(yīng)成員函數(shù)。代理對(duì)象負(fù)責(zé)把客戶的參數(shù)從堆棧中讀出,并寫(xiě)到一塊內(nèi)存緩沖區(qū)中,以便送到下一層進(jìn)一步封裝成為可在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包,這也就是所謂的列集。與列集過(guò)程相對(duì)應(yīng)的過(guò)程是散集,當(dāng)服務(wù)器存根從下層網(wǎng)絡(luò)中接收到列集的數(shù)據(jù)包之后,將包中的參數(shù)解譯出來(lái)并用這些數(shù)據(jù)在本地內(nèi)存中建立一個(gè)新堆棧,使其工作環(huán)境與客戶端的工作環(huán)境相一致。這樣,一旦堆棧被建立起來(lái),存根代碼就可以利用這些參數(shù)直接在進(jìn)程內(nèi)調(diào)用組件對(duì)象成員函數(shù)。當(dāng)調(diào)用返回時(shí),存根從堆棧中將需要輸出的參數(shù)進(jìn)行列集處理,通過(guò)下層網(wǎng)絡(luò)傳輸?shù)娇蛻舳耍蛻舻拇韺?duì)象則把結(jié)果通過(guò)散

5、集之后返回給客戶程序。2.3線路協(xié)議構(gòu)架這一層提供了從服務(wù)端到客戶端之間數(shù)據(jù)傳輸?shù)耐?,使基于DCOM的分布式遠(yuǎn)程調(diào)用得以實(shí)現(xiàn),并且這種基于DCOM的客戶/服務(wù)器結(jié)構(gòu)具有對(duì)等性。231 服務(wù)控制管理器(SCM)SCM是COM庫(kù)的部分,其程序名為rpcss.exe。在基本編程結(jié)構(gòu)中,編程者表面上通過(guò)調(diào)用對(duì)象創(chuàng)建函數(shù)創(chuàng)建遠(yuǎn)程對(duì)象,但實(shí)際上,創(chuàng)建函數(shù)得到遠(yuǎn)程對(duì)象的位置信息后,就把對(duì)象創(chuàng)建以及建立客戶與對(duì)象的連接任務(wù)交給了SCM??蛻鬝CM與服務(wù)SCM之間通過(guò)RPC連接。例如,當(dāng)客戶SCM想激活遠(yuǎn)程組件時(shí),它首先檢查本機(jī)注冊(cè)表中的HKEY_CLASSES_ROOTCLSID鍵的APPID命名值,如果找

6、到了APPID命名值,就在注冊(cè)表中的HKEY_CLASSES_ROOTAPPID部分尋找相同的GUID。在這里可以獲得指定組件在何處并如何激活的命名值信息,當(dāng)請(qǐng)求遠(yuǎn)程計(jì)算機(jī)上的對(duì)象時(shí),客戶SCM通過(guò)RPC通道訪問(wèn)由RemoteServerName值指定的遠(yuǎn)程服務(wù)器SCM。服務(wù)SCM根據(jù)服務(wù)器注冊(cè)表上的有關(guān)信息,在本機(jī)上定位并加載組件。232 RPC通道RPC通道是客戶程序與服務(wù)組件相互傳遞數(shù)據(jù)(包括參數(shù)和有關(guān)輔助信息)的真正通道。它屬于DCERPC規(guī)范中的內(nèi)容,其工作過(guò)程可用圖2來(lái)表示。從圖中可以看出客戶應(yīng)用程序并非真正調(diào)用服務(wù)進(jìn)程,而是調(diào)用本地代理,它能從客戶的地址空間中取得請(qǐng)求參數(shù),將參數(shù)

7、轉(zhuǎn)換為能在網(wǎng)絡(luò)上傳輸?shù)腘DR(Network Data Representing)格式,最后調(diào)用運(yùn)行庫(kù)中的相應(yīng)功能將請(qǐng)求以及參數(shù)通過(guò)網(wǎng)絡(luò)送往服務(wù)器。而在服務(wù)器端,服務(wù)器運(yùn)行庫(kù)從網(wǎng)絡(luò)中接收從客戶端發(fā)來(lái)的請(qǐng)求,并調(diào)用服務(wù)存根的相應(yīng)功能;接著服務(wù)存根從網(wǎng)絡(luò)緩沖區(qū)中獲得參數(shù),并將參數(shù)轉(zhuǎn)換為服務(wù)器能理解的格式;最后在服務(wù)進(jìn)程內(nèi)調(diào)用真正過(guò)程,到此遠(yuǎn)程過(guò)程就開(kāi)始運(yùn)行。當(dāng)過(guò)程運(yùn)行結(jié)束后,服務(wù)端以相同的方式將程序運(yùn)行的結(jié)果傳回客戶端,一個(gè)完整的遠(yuǎn)程過(guò)程調(diào)用就完成。233 對(duì)象管理標(biāo)識(shí)符解析器(OXID Resolver)OXID解析器也象SCM一樣,是COM庫(kù)提供的一項(xiàng)服務(wù),每一個(gè)支持DCOM的機(jī)器上都擁有OX

8、ID解析器。它的主要功能有:1) 存儲(chǔ)本地客戶連接到遠(yuǎn)程對(duì)象所需要的RPC綁定字符串。在這種特殊類型的字符串中包含諸如底層網(wǎng)絡(luò)協(xié)議或運(yùn)行組件所在服務(wù)器的網(wǎng)絡(luò)地址等安全子系統(tǒng)信息。2) 負(fù)責(zé)發(fā)送和接收ping消息,客戶端的OXID解析器向遠(yuǎn)程對(duì)象發(fā)送ping消息,通知遠(yuǎn)程對(duì)象本地還存在客戶。而在服務(wù)端OXID解析器為本地運(yùn)行的對(duì)象接收ping消息。在每臺(tái)機(jī)器上,OXID解析器維護(hù)一個(gè)本地OXID表和同它們相關(guān)的RPC綁定字符串,當(dāng)客戶OXID解析器調(diào)用一個(gè)OXID時(shí),OXID解析器首先檢查本地OXID表,如果發(fā)現(xiàn)了這個(gè)OXID,它立刻返回與之相關(guān)的RPC綁定字符串;如果沒(méi)有發(fā)現(xiàn)這個(gè)OXID,它將

9、通過(guò)RPC連接到服務(wù)器的OXID解析器,請(qǐng)求得到與該OXID相關(guān)的RPC綁定字符串,并返回客戶端。客戶OXID解析器將該串信息存入本地OXID表中,這樣OXID解析器就能快速地為后來(lái)的其它客戶解析該OXID。假設(shè)一個(gè)客戶要從一個(gè)新的OXID得到相應(yīng)的接口指針,其OXID的解析過(guò)程可歸納如下:1) 如果客戶程序運(yùn)行時(shí)發(fā)現(xiàn)目前的服務(wù)對(duì)象OXID是新的,它將請(qǐng)求本地OXID解析器為它解析該OXID。2) 如果客戶OXID解析器也查不到該OXID,它將調(diào)用IOXIDResolver:ResolveOxid,請(qǐng)求服務(wù)OXID解析器返回與該OXID相關(guān)的綁定字符串。3) 如果服務(wù)OXID解析器在本地OXI

10、D表中查到該OXID,則返回與之相關(guān)的綁定字符串,否則,它將訪問(wèn)服務(wù)進(jìn)程,產(chǎn)生一個(gè)新的OXID表項(xiàng)以及相關(guān)的綁定字符串,并返回給客戶OXID解析器。4) 客戶OXID解析器在本地OXID表中儲(chǔ)存了該OXID表項(xiàng)和相關(guān)的綁定字符串,以備后用,并返回該綁定字符串給客戶進(jìn)程。5) 客戶進(jìn)程將該綁定字符串與對(duì)象綁定起來(lái),客戶就可以調(diào)用對(duì)象成員函數(shù)了。234 pinging 機(jī)制客戶端、服務(wù)端、網(wǎng)絡(luò)的軟硬件出錯(cuò)都可能導(dǎo)致遠(yuǎn)程調(diào)用的失敗,甚至更嚴(yán)重的后果,DCOM為了確定客戶是否存活,定義了pinging機(jī)制。它的方法是:服務(wù)器周期性地復(fù)審它的遠(yuǎn)程連接表并向客戶發(fā)一消息,詢問(wèn)客戶是否還存活。如果客戶仍舊正

11、常操作,它就返回一個(gè)確認(rèn)。如果服務(wù)器在設(shè)定時(shí)間周期內(nèi)沒(méi)有收到確認(rèn)消息,則認(rèn)為該客戶已“死亡”,并將其引用釋放。ping消息的發(fā)送將占用一定的帶寬,導(dǎo)致太多不必要的網(wǎng)絡(luò)通信??梢栽O(shè)想,在一個(gè)包含有成千上萬(wàn)個(gè)客戶和組件的分布式環(huán)境中,網(wǎng)絡(luò)容量很可能被要傳輸?shù)膒ing消息所占據(jù)。為了減少這種網(wǎng)絡(luò)通信,在Windows NT 4.0以上版本的環(huán)境中,可以利用客戶端的OXID解析器來(lái)檢測(cè)本地所有客戶程序是否存活,然后每一臺(tái)機(jī)器而不是每一個(gè)客戶向服務(wù)器發(fā)送一個(gè)ping消息,這樣客戶OXID解析器就只發(fā)送一個(gè)ping消息給每一個(gè)為本地客戶服務(wù)的機(jī)器。為了進(jìn)一步減少這種網(wǎng)絡(luò)通信,DCOM程序員提出了ping集

12、合的概念。DCOM不是給每一個(gè)客戶程序使用的每一個(gè)對(duì)象都發(fā)一個(gè)單獨(dú)的ping消息,它標(biāo)識(shí)出在被ping的對(duì)象并將它們放入一個(gè)集合中。服務(wù)器第一次發(fā)送ping消息的時(shí)候,它將整個(gè)集合名單連同消息一并發(fā)出。然后,接下來(lái)的ping消息只發(fā)出ping集合的ID,連同一個(gè)加減原始ping集合的列表。這也就是所謂的delta pinging機(jī)制3、結(jié)束語(yǔ)以上從遠(yuǎn)程調(diào)用的角度將DCOM體系結(jié)構(gòu)分成三層,并分別闡明了各層的工作機(jī)理??梢?jiàn),DCOM遠(yuǎn)程調(diào)用機(jī)制為COM提供了一個(gè)分布式的計(jì)算環(huán)境,使得基于COM的應(yīng)用系統(tǒng)具有更高的可伸縮性、可靠性、管理性、靈活性和健壯性。另一方面,DCOM使系統(tǒng)開(kāi)發(fā)者不必關(guān)心網(wǎng)絡(luò)協(xié)議等底層結(jié)構(gòu)的細(xì)節(jié),可以集中注意力在解決用戶所需的問(wèn)題上,而且還可以充分運(yùn)用原有的面向COM的開(kāi)發(fā)工具,開(kāi)發(fā)環(huán)境以及概念、知識(shí)等,從而可以節(jié)約大量的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論