• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見(jiàn)諒!~
            隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            COM原理及應(yīng)用----分布式COM(DCOM)

            1DCOM

                   COM的進(jìn)程透明特性表現(xiàn)在組件對(duì)象和客戶程序即可以擁有各自的進(jìn)程空間,也可以共享同一個(gè)進(jìn)程空間,COM負(fù)責(zé)把客戶的調(diào)用正確傳到組件對(duì)象中,并保證參數(shù)傳遞的正確性。組件對(duì)象和客戶代碼不必考慮調(diào)用傳遞的細(xì)節(jié),只要按照一般的函數(shù)調(diào)用的方式實(shí)現(xiàn)即可。如果進(jìn)一步拓展進(jìn)程透明特性,考慮組件對(duì)象與客戶程序運(yùn)行在不同計(jì)算機(jī)上的情形,把進(jìn)程透明性拓展為位置透明性,形成分布式組件對(duì)象模型,簡(jiǎn)稱為DCOM

                   DCOMCOM的擴(kuò)展,它可以支持不同計(jì)算機(jī)上組件對(duì)象與客戶程序之間或者組件對(duì)象之間的相互通信,這些計(jì)算機(jī)可以在局域網(wǎng)內(nèi)、廣域網(wǎng)上、 Internet上。對(duì)于客戶程序而言,組件程序所處的位置是透明的,我們不必編寫任何處理遠(yuǎn)程調(diào)用的代碼,因此,DCOM也是COM的無(wú)縫擴(kuò)展。 DCOM處理了底層網(wǎng)絡(luò)協(xié)議的所有細(xì)節(jié)。

            2、從COM轉(zhuǎn)向DCOM

                 

                   進(jìn)程內(nèi)組件與客戶程序之間的通信過(guò)程比較簡(jiǎn)單。本地進(jìn)程外組件與客戶程序之間的通信并不是直接進(jìn)行的,而是用到了操作系統(tǒng)支持的一些跨進(jìn)程通信方法。

                 

                   DCOM只是簡(jiǎn)單地把本地跨進(jìn)程通信用一個(gè)網(wǎng)絡(luò)協(xié)議傳輸過(guò)程來(lái)代替,只是中間數(shù)據(jù)傳遞的路線更長(zhǎng)一些。當(dāng)然,網(wǎng)絡(luò)通信比單機(jī)系統(tǒng)環(huán)境下的跨進(jìn)程通信要脆弱得多,所以為了保證協(xié)作過(guò)程的可靠性以及程序?qū)Ξ惓J录膽?yīng)變能力,客戶程序和組件程序需要考慮更多的細(xì)節(jié)。

            3DCOM對(duì)象的定位

                   客戶程序調(diào)用COM庫(kù)的基礎(chǔ)創(chuàng)建函數(shù)(比如CoGetClassObject)創(chuàng)建遠(yuǎn)程組件對(duì)象需要知道遠(yuǎn)程機(jī)器名和對(duì)象CLSID

                   有兩種方法可以得到遠(yuǎn)程對(duì)象的機(jī)器名信息:一是在創(chuàng)建函數(shù)的參數(shù)中指定COSERVERINFO結(jié)構(gòu),二是使用DCOM配置工具指定遠(yuǎn)程機(jī)器名。

                   COM庫(kù)的創(chuàng)建函數(shù)得到了遠(yuǎn)程對(duì)象的位置信息后,再把對(duì)象創(chuàng)建的任務(wù)交給SCM,由SCM通過(guò)RPC與遠(yuǎn)程機(jī)器進(jìn)行通信。SCM(程序名為 Rpcss.exe)也是COM庫(kù)的一部分,但它是一個(gè)單獨(dú)的進(jìn)程。SCM負(fù)責(zé)創(chuàng)建新的COM對(duì)象,也負(fù)責(zé)建立組件對(duì)象與客戶程序之間的連接。如果要?jiǎng)?chuàng)建遠(yuǎn)程對(duì)象,它會(huì)通過(guò)RPC調(diào)用遠(yuǎn)程機(jī)器上的SCM,由遠(yuǎn)程機(jī)器上的SCM啟動(dòng)組件進(jìn)程,并創(chuàng)建組件對(duì)象,然后返回到客戶機(jī)器。

             

                   當(dāng)然,遠(yuǎn)程組件對(duì)象被創(chuàng)建之后,它在返回到客戶機(jī)器的途中,還要經(jīng)過(guò)列集和散集的處理,包括創(chuàng)建代理對(duì)象和裝載存根代碼等,這些處理與本地進(jìn)程外組件對(duì)象的處理完全一致。一旦組件對(duì)象被創(chuàng)建完成之后,客戶與組件之間的通信不再經(jīng)過(guò)SCM,而是直接通過(guò)代理對(duì)象和存根對(duì)象以及COM庫(kù)提供的底層傳輸機(jī)制來(lái)完成。

            4、列集與散集

                   列集與散集是實(shí)現(xiàn)COM組件對(duì)象跨進(jìn)程特性的關(guān)鍵技術(shù),它包括標(biāo)準(zhǔn)列集法和自定義列集法。同樣的技術(shù)也適用于DCOM組件對(duì)象與客戶程序之間的通信,兩者的區(qū)別在于列集數(shù)據(jù)包的傳遞方式有所不同,對(duì)于本地組件對(duì)象使用LPC傳遞,而對(duì)于DCOM組件對(duì)象使用RPC傳遞。

                   DCOM提供了一套復(fù)雜的列集和散集機(jī)制,它建立在RPC的基礎(chǔ)上。由于RPC被定義為DCE(分布式計(jì)算系統(tǒng))標(biāo)準(zhǔn)的一部分,而DCE RPC定義了所有常用數(shù)據(jù)類型的數(shù)據(jù)表達(dá)方式,即網(wǎng)絡(luò)數(shù)據(jù)表示法(NDRnetwork data representation)。為了使存根代碼和代理對(duì)象能夠正確地對(duì)參數(shù)和返回結(jié)果進(jìn)行列集和散集,它們應(yīng)該使用一致的數(shù)據(jù)表示法NDR,以便在不同的操作系統(tǒng)環(huán)境下也能夠遠(yuǎn)程調(diào)用。

            5、對(duì)象RPC

                   DCOM協(xié)議也被稱為對(duì)象RPCORPCobject remote procedure call),它建立在DCE RPC協(xié)議的基礎(chǔ)上,可用于各種基于組件的分布式系統(tǒng)。ORPC建立了一套面向?qū)ο蟮倪h(yuǎn)程調(diào)用規(guī)范,指定了如何在網(wǎng)絡(luò)上進(jìn)行調(diào)用、對(duì)對(duì)象的引用如何表示和如何維護(hù)。ORPC協(xié)議已經(jīng)被作為Internet草案遞交到IETFInternet Engineering Task Force Internet 工程部)。

                   InternetIntranet網(wǎng)絡(luò)環(huán)境下,ORPC仍使用標(biāo)準(zhǔn)的RPC數(shù)據(jù)包,附加上專用于DCOM的一些信息――接口指針標(biāo)識(shí)符(IPIDinterface point identifier)、版本信息和擴(kuò)展信息――作為調(diào)用和返回的附加參數(shù)進(jìn)行傳送,其中IPID表示調(diào)用被處理的遠(yuǎn)程機(jī)器上特定對(duì)象的特定接口。 DCOM客戶程序必須周期性地“pinging”遠(yuǎn)程機(jī)器上的對(duì)象,以便保證客戶與對(duì)象一直處于連接狀態(tài)。

            6DCOM特性

                   DCOM可以作為分布式應(yīng)用系統(tǒng)的基本架構(gòu),客戶程序與DCOM組件對(duì)象之間形成了客戶/服務(wù)器關(guān)系,進(jìn)一步可構(gòu)成多層軟件模型。DCOM組件具有COM 組件的一些基本特性,包括重用性、語(yǔ)言無(wú)關(guān)性等。而位置透明性 是DCOM的一個(gè)基本特性。DCOM的其他特性如下:

                   1)可伸縮性。一方面,DCOM利用操作系統(tǒng)本身的可伸縮性;另一方面,DCOM提供了靈活的配置方案,允許不同的組件對(duì)象允許在不同的服務(wù)器上,DCOM的位置透明性保證了這種變化可以不必修改組件源程序。

                   2)可配置性。安裝和管理是分布式軟件系統(tǒng)的兩個(gè)重要環(huán)節(jié)。DCOM提供了一個(gè)圖形界面的配置工具程序(DCOMCNFG.EXE),可使客戶程序和組件程序在不改變代碼的情況下適應(yīng)不同的網(wǎng)絡(luò)環(huán)境。

                   3)安全性。DCOM使用了Windows NT提供的可擴(kuò)展安全性框架,在非NT平臺(tái)上實(shí)現(xiàn)的DCOM也包括了一個(gè)與NT兼容的安全提供器。DCOM實(shí)現(xiàn)的安全性分為訪問(wèn)安全性和激活安全性,訪問(wèn)安全性指定那些用戶可以調(diào)用組件對(duì)象,激發(fā)安全性指定哪些用戶可以在一個(gè)新進(jìn)程中創(chuàng)建新的對(duì)象。

                   4)協(xié)議無(wú)關(guān)性。

                   5)平臺(tái)獨(dú)立性

            7、對(duì)象激活

                   激活(activation)一個(gè)組件對(duì)象包括兩種情形:一是創(chuàng)建新的組件對(duì)象,二是建立已有組件對(duì)象與客戶之間的連接。

                   COM擴(kuò)展到DCOM之后,遠(yuǎn)程對(duì)象的創(chuàng)建過(guò)程有所不同。為了標(biāo)識(shí)一個(gè)遠(yuǎn)程對(duì)象,僅僅提供一個(gè)128位的GUID還不夠,還必須提供遠(yuǎn)程對(duì)象所在的機(jī)器名,也稱為遠(yuǎn)程服務(wù)器名“RemoteServerName”。

            1)創(chuàng)建DCOM組件方法一

                   通過(guò)DCOM配置工具指定遠(yuǎn)程服務(wù)器名,這種方式使得DCOM組件具有位置透明性。在Windows系統(tǒng)平臺(tái)上,遠(yuǎn)程服務(wù)器名字RemoteServerName值被保存在系統(tǒng)注冊(cè)表HKEY_CLASSES_ROOT\APPID鍵下。

                   CLSIDAppID鍵的結(jié)構(gòu)可以看出,每個(gè)AppID可用于多個(gè)組件對(duì)象,通常它代表了由多個(gè)CLSID共享的進(jìn)程,該進(jìn)程中的所有對(duì)象共享同樣的配置信息,包括遠(yuǎn)程服務(wù)器名以及安全信息。在DCOM中引入AppID概念可以避免太多的注冊(cè)表關(guān)鍵字。

            2)創(chuàng)建DCOM組件方法二

                   用第一種方法并不是總能滿足應(yīng)用的要求,有些應(yīng)用要求在程序運(yùn)行過(guò)程中控制要連接的服務(wù)器,比如多人游戲程序、網(wǎng)絡(luò)遠(yuǎn)程管理工具等。對(duì)于這樣的應(yīng)用,DCOM允許在創(chuàng)建函數(shù)中指定遠(yuǎn)程服務(wù)器名字。可以指定遠(yuǎn)程服務(wù)器名字的創(chuàng)建函數(shù):CoCreateInstanceEx CoGetClassObjectCoGetInstanceFromFileCoGetInstanceFromeIStorage

                   在程序中指定服務(wù)器名字的另外一個(gè)功能是實(shí)現(xiàn)分布式應(yīng)用系統(tǒng)的動(dòng)態(tài)負(fù)載平衡。目前DCOM還很難以實(shí)現(xiàn)自動(dòng)負(fù)載平衡特性,但我們可以建立一個(gè)分派服務(wù)組件對(duì)象,所有的客戶都創(chuàng)建指定機(jī)器上的分派服務(wù)組件對(duì)象,由它創(chuàng)建另一個(gè)真正實(shí)現(xiàn)應(yīng)用功能的遠(yuǎn)程對(duì)象,在把此遠(yuǎn)程對(duì)象返回給客戶程序,以后客戶程序不再使用分派服務(wù)組件對(duì)象,而直接調(diào)用遠(yuǎn)程對(duì)象。而分派服務(wù)組件對(duì)象可以根據(jù)當(dāng)前的負(fù)載狀態(tài),從一組服務(wù)器中選擇負(fù)載最輕的服務(wù)器作為目標(biāo),創(chuàng)建遠(yuǎn)程對(duì)象。

             

            8、遠(yuǎn)程創(chuàng)建進(jìn)程內(nèi)組件:代理進(jìn)程(surrogate

                   為了遠(yuǎn)程運(yùn)行進(jìn)程內(nèi)組件即DLL組件,要求在遠(yuǎn)程機(jī)器上有代理進(jìn)程(surrogate process)。除了可以遠(yuǎn)程啟動(dòng)進(jìn)程內(nèi)組件之外,代理進(jìn)程還提供了下面的特性:

            l         進(jìn)程內(nèi)組件程序中的嚴(yán)重錯(cuò)誤只影響代理進(jìn)程,不會(huì)使客戶進(jìn)程崩潰;

            l         一個(gè)代理進(jìn)程可以同時(shí)為多個(gè)客戶提供服務(wù);

            l         客戶可以保護(hù)自己避免靠不住的組件程序代碼,只訪問(wèn)組件程序提供的服務(wù);

            l         在代理進(jìn)程中運(yùn)行進(jìn)程內(nèi)服務(wù)可使DLL享有代理進(jìn)程的安全性。

            Windows引進(jìn)了缺省的代理進(jìn)程,以及編寫自定義代理進(jìn)程的協(xié)議規(guī)范。缺省實(shí)現(xiàn)的代理進(jìn)程是一個(gè)混合線程模型、偽COM服務(wù)程序。當(dāng)多個(gè)DLL組件被裝入到單個(gè)代理進(jìn)程時(shí),該進(jìn)程按照注冊(cè)表中指定的線程模型對(duì)每個(gè)DLL組件對(duì)象進(jìn)行實(shí)例化。如果一個(gè)DLL組件對(duì)象支持兩種線程模型,則COM選擇自由線程模型。COM即可以控制DLL組件程序的卸載,也可以終止代理進(jìn)程。

            如果一個(gè)進(jìn)程內(nèi)組件滿足下列條件,則它將被裝入代理進(jìn)程:

            l         系統(tǒng)注冊(cè)表中,在組件對(duì)象的CLSID關(guān)鍵字下必須要指定AppID值,以及對(duì)應(yīng)的AppID關(guān)鍵字;

            l         客戶程序在創(chuàng)建對(duì)象實(shí)例時(shí),必須設(shè)置CLSTX_LOCAL_SERVER標(biāo)志;

            l         組件對(duì)象的CLSID關(guān)鍵字下不指定LocalServer32LocalServerLocalService值;

            l         組件對(duì)象的CLSID關(guān)鍵字包含InProvServer32子鍵;

            l         InProcServer32子鍵中指定的DLL文件必須存在;

            l         組件對(duì)象對(duì)應(yīng)的AppID鍵下指定DllSurrogate值。

            如果組件對(duì)象的CLSID鍵下的LocalServerLocalServer32LocalService值指示了EXE的存在,則EXE程序?qū)⒈粌?yōu)先執(zhí)行,COM不再啟動(dòng)代理程序。

            9、利用名字對(duì)象(moniker)連接到遠(yuǎn)程對(duì)象實(shí)例

                   通常COM對(duì)象實(shí)例是不可相互替代到,或者說(shuō)不可相互交換的。它通過(guò)自己特有的狀態(tài)區(qū)別于同一類的其他對(duì)象實(shí)例。

                   在第8章中介紹的COM命名和綁定機(jī)制對(duì)于遠(yuǎn)程對(duì)象同樣適用。

            10、連接管理——遠(yuǎn)程對(duì)象生存期的控制

                   COM控制對(duì)象的生存期最基本的機(jī)制是引用計(jì)數(shù),利用IUnknownAddRefRelease成員函數(shù)控制對(duì)象的生存期。DCOM優(yōu)化了遠(yuǎn)程對(duì)象的AddRefRelease的調(diào)用。優(yōu)化過(guò)程使用了OXIDobject exporter identifier ,對(duì)象管理標(biāo)識(shí)符)對(duì)象。OXID是一個(gè)64位值,通過(guò)OXID可以把RPC串綁定調(diào)用到它們的目標(biāo)IPID。但是,在執(zhí)行調(diào)用之前,調(diào)用進(jìn)程必須把 OXID轉(zhuǎn)譯成為底層RPC可以解釋的一組綁定。

                   在每臺(tái)支持DCOM的機(jī)器上,都有一個(gè)被稱為OXID解析器(OXID Resolver)的服務(wù),它負(fù)責(zé)向客戶提供用于連接到OXIDRPC串綁定信息,也負(fù)責(zé)接收遠(yuǎn)程發(fā)來(lái)的“pinging”信息。OXID解析器之間通過(guò)RPC進(jìn)行通信,它實(shí)現(xiàn)了RPC接口IOXIDResolver(不是COM接口)。

                 

            11、連接管理——pinging機(jī)制

                   如果不考慮客戶進(jìn)程可能會(huì)非正常終止,則利用遠(yuǎn)程引用計(jì)數(shù)控制對(duì)象生存期已經(jīng)足夠了。為了檢測(cè)客戶程序是否非正常終止,DCOM提供了一種簡(jiǎn)單的方法 “pinging”。在現(xiàn)在實(shí)現(xiàn)的DCOM版本中,pingPeriod=2(分)且numPingsToTimeOut=3,這些值不能被改變。

            12、連接管理——連接點(diǎn)管理

                   許多實(shí)際的分布式應(yīng)用都需要在兩個(gè)對(duì)象之間進(jìn)行雙向通信。由于DCOM是對(duì)COM的無(wú)縫擴(kuò)展,在第6章中介紹的COM提供的連接點(diǎn)機(jī)制同樣適用于遠(yuǎn)程對(duì)象的情形。

                 

            13、連接管理——連接傳遞

            用分派服務(wù)組件對(duì)象來(lái)實(shí)現(xiàn)分布式應(yīng)用的負(fù)載平衡特性實(shí)際上用到了連接傳遞特性。

                   連接傳遞不等于遠(yuǎn)程對(duì)象創(chuàng)建的傳遞,DCOM不支持位置透明方式下對(duì)象創(chuàng)建的傳遞過(guò)程,但可以利用連接傳遞特性,通過(guò)程序控制服務(wù)器名字的方式實(shí)現(xiàn)遠(yuǎn)程對(duì)象創(chuàng)建的傳遞。

            14、并發(fā)管理——線程模型

                   COM本身并沒(méi)有線程模型,可以認(rèn)為COM借用了Windows操作系統(tǒng)提供的線程模型,Win32程序設(shè)計(jì)模型把線程分成UI線程和輔助線程,相對(duì)應(yīng)地,COM把線程分成套間線程和自由線程。套間線程使用CoInitialize API函數(shù)執(zhí)行COM庫(kù)的初始化,COM在套間線程內(nèi)部創(chuàng)建了一個(gè)隱藏的窗口,此窗口的窗口過(guò)程函數(shù)負(fù)責(zé)把客戶對(duì)套間中的組件對(duì)象的調(diào)用發(fā)送到正確的成員函數(shù)中。

            15、并發(fā)管理——消息過(guò)濾器

                   COMDCOM的線程模型使我們了解到了客戶程序與組件對(duì)象調(diào)用過(guò)程中的線程切換,但調(diào)用可能會(huì)阻塞程序,甚至使得客戶程序無(wú)法正常進(jìn)行。為此,COM提供了消息過(guò)濾機(jī)制,它既可用于客戶程序,也可用于組件程序,允許它們對(duì)于入調(diào)用和出調(diào)用有所選擇。

                   COM把調(diào)用分為三類:第一種是同步調(diào)用,這是最常見(jiàn)的調(diào)用類型,客戶調(diào)用組件對(duì)象,一直等到對(duì)象執(zhí)行完所有功能后再返回;第二種是異步調(diào)用,客戶調(diào)用組件對(duì)象,但不等到對(duì)象執(zhí)行完功能就馬上返回,以后對(duì)象通過(guò)出接口通知客戶程序,這也就是我們?cè)诘?span lang=EN-US>6章介紹的可連接對(duì)象機(jī)制;第三種為輸入同步調(diào)用,被調(diào)用對(duì)象必須在放棄控制之前返回,以便保證用戶界面不受影響,也就是說(shuō),在調(diào)用執(zhí)行過(guò)程中,對(duì)象不能調(diào)用任何可能會(huì)進(jìn)入消息循環(huán)的函數(shù)。

            16DCOM安全模型

                   DCOM安全性建立在底層安全提供器基礎(chǔ)上,有些操作系統(tǒng)可以支持多個(gè)安全提供器,DCOMRPC也可以同時(shí)支持多個(gè)安全提供器。所有的安全提供器有一個(gè)共同點(diǎn),它們提供了一種表示安全角色(一般為用戶賬號(hào))的方法、一種鑒定安全角色(一般通過(guò)口令或私有鑰匙)的方法,以及管理安全角色和其鑒定數(shù)據(jù)的一套機(jī)制。

            17DCOM安全模型——安全性策略

                   1)訪問(wèn)安全性和激發(fā)安全性。

                   2)對(duì)象的安全身份。

                   3)保護(hù)數(shù)據(jù)。

                   4)鑒定級(jí)別。

                   5)模仿級(jí)別。

            18DCOM安全模型——安全性配置

                   DCOM提供了多種保護(hù)應(yīng)用程序的方法,一方面,DCOM可以強(qiáng)制使用安全性而不用任何對(duì)象或?qū)ο蟮目蛻舫绦蜃鋈魏喂ぷ鳎瑢?duì)象的安全性設(shè)置可以在外部配置并且DCOM會(huì)自動(dòng)強(qiáng)制使用。另一方面,DCOM把它完整的安全性結(jié)構(gòu)暴露給開(kāi)發(fā)者,因而客戶和對(duì)象都可以通過(guò)程序控制其安全策略。

             

            posted on 2009-06-29 10:56 肥仔 閱讀(1358) 評(píng)論(0)  編輯 收藏 引用 所屬分類: COM

            久久综合亚洲色HEZYO国产 | 亚洲va久久久噜噜噜久久| 久久婷婷色综合一区二区| 久久久久波多野结衣高潮| 久久精品水蜜桃av综合天堂| 四虎国产永久免费久久| 亚洲国产精品成人AV无码久久综合影院 | 色诱久久av| 亚洲午夜久久久久久久久久| 久久综合久久综合九色| 国产色综合久久无码有码| 97久久精品人人澡人人爽| 18岁日韩内射颜射午夜久久成人| 久久福利青草精品资源站| 久久天天躁狠狠躁夜夜不卡 | 亚洲欧美日韩久久精品| 国产精品岛国久久久久| 国产69精品久久久久观看软件 | 国产精品久久久久久久| 狠狠色狠狠色综合久久 | 青青草原精品99久久精品66| 久久久久人妻精品一区三寸蜜桃| AV无码久久久久不卡网站下载 | 一本久久a久久精品亚洲| 无码人妻久久一区二区三区蜜桃| 日本一区精品久久久久影院| 久久亚洲精精品中文字幕| 久久无码AV一区二区三区| 久久亚洲国产成人影院网站| www亚洲欲色成人久久精品| 久久精品一区二区| 久久精品国产福利国产秒| 久久久久亚洲AV成人片 | 人人狠狠综合88综合久久| 99久久精品免费看国产| 国产精品美女久久久久AV福利| 久久99精品综合国产首页| 国产精品99久久精品| AV狠狠色丁香婷婷综合久久| 久久不射电影网| 品成人欧美大片久久国产欧美|