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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論