小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

COM, COM+ and .NET 的區(qū)別

 君王之王 2015-09-19


天極論壇2002-02-08 11:27我要吐槽
  所有的優(yōu)秀程序員都會(huì)盡自己的最大努力去使自己所寫(xiě)的程序具有更好的可重用性,因?yàn)樗梢宰屇憧焖俚貙?xiě)出更加健壯和可升級(jí)性的程序。 

  有兩種使代碼重用的選擇:

  1.白盒:最簡(jiǎn)單的一種,就是把你的程序片拷貝到另一個(gè)文件中。
  2.黑盒:它包括把編譯過(guò)的程序片連接起來(lái)。因此客戶端可以調(diào)用的編譯過(guò)的黑盒類庫(kù)就叫作組件。 

  .Net中也同樣為開(kāi)發(fā)者提供了類似于COM的建立和展開(kāi)組件的方法。開(kāi)發(fā)人員很容易地被這兩種以組件為基礎(chǔ)的開(kāi)發(fā)模型所迷惑,所以,讓我們來(lái)看一看這些不同的開(kāi)發(fā)方法,以使我們消除疑惑。 

  COM的產(chǎn)生 

  在以前程序設(shè)計(jì)過(guò)程中,程序員把它們的函數(shù)庫(kù)放在一個(gè)叫做目標(biāo)(Object)文件的單獨(dú)文件中,在這些文件中,包含了編譯過(guò)的代碼。當(dāng)程序員要使用一個(gè)特別的目標(biāo)文件的時(shí)候,他們把客戶程序編譯成機(jī)器代碼,然后依靠動(dòng)態(tài)鏈接的手段把客戶程序聯(lián)接到目標(biāo)文件上,最后變成一個(gè)單一的可執(zhí)行文件。這種作法的唯一的好處在于它節(jié)省了編譯函數(shù)庫(kù)的時(shí)間。但是它有許多的缺點(diǎn),比如由于在每個(gè)單獨(dú)的可執(zhí)行文件中都有一個(gè)程序庫(kù)包括在里面,浪費(fèi)了許多存儲(chǔ)空間;對(duì)應(yīng)用程序的維護(hù)也是非常困難的,如果在函數(shù)庫(kù)中發(fā)現(xiàn)了一個(gè)bug,整個(gè)可執(zhí)行文件都要被重新編譯和分發(fā)。 

  還有不只一個(gè)的嚴(yán)重的限制在里頭,一個(gè)客戶應(yīng)用程序必須要和用同一種語(yǔ)言編制的函數(shù)庫(kù)在一起才能使用。比如說(shuō),一個(gè)用QuickBasic寫(xiě)的客戶應(yīng)用程序就不能引用一個(gè)用C++寫(xiě)的函數(shù)庫(kù)。 

  因此,微軟公司出品了COM,COM僅僅只是一個(gè)規(guī)范。不管組件用什么語(yǔ)言寫(xiě)成,只要符合這個(gè)COM規(guī)范,就能被用任何一種語(yǔ)言寫(xiě)成的客戶程序調(diào)用。此外,程序員不必再擔(dān)心要去建立一個(gè)單一的可執(zhí)行文件,因?yàn)榻M件是以GUID(Global Unique Identifier全球唯一標(biāo)識(shí)符)來(lái)標(biāo)識(shí)的。GUID是一個(gè)128位的號(hào)碼,和一些相關(guān)的信息一起被放在系統(tǒng)的注冊(cè)表中,用來(lái)唯一標(biāo)識(shí)組件。客戶應(yīng)用程序只在運(yùn)行期間才動(dòng)態(tài)地建立一個(gè)組件的實(shí)例,并使用這個(gè)組件的功能,因此,只需要一個(gè)函數(shù)庫(kù)的拷貝。它的缺點(diǎn)就是大家常常提到?quot;DLL地獄"。這個(gè)問(wèn)題在一個(gè)DLL要被一個(gè)新版本的DLL所取代時(shí)引發(fā)。開(kāi)發(fā)者不得不通過(guò)關(guān)閉所有的客戶應(yīng)用程序的方法(如果不行,還要關(guān)閉WWW服務(wù))來(lái)達(dá)到清除所用對(duì)這個(gè)組件的引用的目的。有時(shí)所有的方法都還起不了作用,那你只好重新啟動(dòng)服務(wù)器后才能替換掉老的DLL。 

  COM+ 

  為了讓企業(yè)級(jí)的應(yīng)用程序能使用上COM,它必需要有以下的特定的能力。

  · 驗(yàn)證能力 
  · 對(duì)象池(Object Pooling)
  · 事務(wù)處理 
  · 支持分布式架構(gòu)

  為了使開(kāi)發(fā)者不必去為他們的組件添加這些能力,微軟公司出品了DCOM(Distributed COM分布式COM)和MTS(Microsoft Transaction Server微軟事務(wù)服務(wù)器)。使用這兩種技術(shù),開(kāi)發(fā)者就可以把精力用在他們的商業(yè)邏輯上,而不必放在后臺(tái)的他們的組件上。 

  DCOM是一個(gè)用于分布式的組件之間的通訊的RPC(Remote Procedure Call)協(xié)議??蛻舳讼蛞粋€(gè)本地機(jī)的代理類發(fā)送請(qǐng)求,然后由代理類將這個(gè)請(qǐng)求隱含地給安裝在遠(yuǎn)程機(jī)器上的"根"類,然后執(zhí)行結(jié)果原路送回給代理類,最后代理類把它們回送給客戶端。因此,客戶程序的位置完全與組件的位置無(wú)關(guān)。DCOM的缺點(diǎn)在于,由于DCOM使用的是一個(gè)獨(dú)立的硬件端口,而不是HTTP協(xié)議的80端口,所以在組件間通訊的過(guò)程中,必須保證這個(gè)端口是開(kāi)著的。這是一個(gè)嚴(yán)重的安全問(wèn)題。所以DCOM不能夠輕易地穿越防火墻。 

  為了使用MTS,程序員在它們的組件里放置特別的MTS鉤子,編譯后把他們放在MTS包中。把有關(guān)系的組件放在一個(gè)單一的包中有它自己的好處。當(dāng)客戶請(qǐng)求一個(gè)包中的一個(gè)組件的一個(gè)實(shí)例的時(shí)候,MTS確保為這個(gè)包建立一個(gè)新的專門的線程,一個(gè)新的組件實(shí)例被建立在這個(gè)線程上并被應(yīng)用事務(wù)服務(wù)。至于對(duì)象池服務(wù)和安全服務(wù)是否要被建立,那就要看開(kāi)發(fā)者的請(qǐng)求了。 

  MTS允許相關(guān)的作業(yè)單元被當(dāng)作一個(gè)事務(wù)來(lái)對(duì)待,這意味著如果所有的作業(yè)單元被成功地完成,整個(gè)事務(wù)就被當(dāng)作成功地完成,反之如果有一個(gè)單元未成功完成,整個(gè)事務(wù)將被重新輪回。 

  在客戶請(qǐng)求對(duì)象和釋放對(duì)象后,MTS仍保存著這個(gè)對(duì)象,所以當(dāng)另一個(gè)客戶請(qǐng)求同一個(gè)組件的時(shí)候,MTS就將保存著的對(duì)象交給它。通過(guò)這種方式,MTS減少了在服務(wù)器源實(shí)例化的次數(shù)。 

  MTS允許開(kāi)發(fā)者用安全措施來(lái)組裝他們的組件,以使其具有識(shí)別請(qǐng)求它的服務(wù)的客戶的能力。這能夠確保未經(jīng)授權(quán)的客戶不能夠使用組件的功能。 

  MTS以COM+的名義被完整地整合到了微軟公司的Windows 2000操作系統(tǒng)中,但是COM+不僅僅只有MTS,它還包括一些其它的服務(wù)。MSMQ(Microsoft Message Queue Server),一個(gè)與MTS一同發(fā)布的服務(wù),也被以COM+的名義整合到了Windows 2000中。MSMQ允許服務(wù)器端和客戶端進(jìn)行同步的通訊。事件服務(wù)(Event Service)也被加了進(jìn)來(lái),它使服務(wù)器能夠與客戶端同步地交流事件的發(fā)生。負(fù)載平衡服務(wù)(Load Balancing)自動(dòng)地實(shí)例化機(jī)器上的具有最多資源的服務(wù)器上的請(qǐng)求對(duì)象。 

  .NET 

  .Net提供了一種全新的建立和展開(kāi)組件的方法。它就是大名鼎鼎的Assemblies。使用COM,開(kāi)發(fā)者必需要在服務(wù)器上注冊(cè)組件,這也就是說(shuō),系統(tǒng)注冊(cè)表中的組件的信息必須被更新。這樣做的目的是保證組件的中心位置,以使COM+能夠找到合適的組件。使用.Net的Assemblies,裝配(Assembly)文件把所有需要的元數(shù)據(jù)(meta data)都?jí)喝胍粋€(gè)叫Manifests(名單)的一個(gè)特殊的段中。在.Net中,要使assembly對(duì)用戶有效,只要簡(jiǎn)單地把他們放在一個(gè)目錄中就行了。當(dāng)客戶程序請(qǐng)求一個(gè)特別的組件的實(shí)例的時(shí)候,.Net運(yùn)行期(runtime)在同一個(gè)目錄搜尋assembly,在找到后,分析其中的manifest,以取得這個(gè)組件所提供的類的信息。由于組件的信息是放在manifest里的,所以開(kāi)發(fā)者就沒(méi)有必要把組件注冊(cè)到服務(wù)器上,因此,就可以允許幾個(gè)相同的組件安全地共存在一個(gè)相同的機(jī)器上了。 

  建立一個(gè).Net assembly并不像建立一個(gè)VB6組件,唯一讓開(kāi)發(fā)者操心的就是商業(yè)邏輯,所有的后臺(tái)代碼全部由.Net運(yùn)行期產(chǎn)生,而且由于.NET運(yùn)行期具有碎片收集器的功能,組件不必?fù)?dān)心它的引用數(shù)目(在COM中是靠Iunknown的幫助)。簡(jiǎn)單地說(shuō),在.NET中建立一個(gè)assembly比建立一個(gè)VB6 COM要簡(jiǎn)單地多。 

  純的.NET assemblies不能夠在COM+服務(wù)下注冊(cè),因?yàn)樗鼈兪呛虲OM不同的二進(jìn)制標(biāo)準(zhǔn)。面對(duì).NET,assemblies的前景相對(duì)于COM來(lái)說(shuō)是"高級(jí)的COM"。但是由于當(dāng)前架構(gòu)于COM+上的應(yīng)用程序的可靠性,COM還會(huì)持續(xù)一段時(shí)間。這也許就是微軟公司向開(kāi)發(fā)者同時(shí)提供開(kāi)發(fā).NET assemblies和COM的工具的原因吧。 

  類型庫(kù)引入器(Type Library Importer (TLBIMP.exe))工具可以把COM組件封裝成.NET,以使以前的東西可以在.NET應(yīng)用程序中繼續(xù)使用。 

  類型庫(kù)導(dǎo)出器(Type Library Exporter (TLBEXP.exe))工具將.NET組件封裝成COM,這個(gè)工具也是很有用的,如果你要用你的.NET assemblies去替換原有的COM組件,就得用到它了。由COM+提供的服務(wù)不能被忽略,所以把.NET assemblies封裝成COM組件就變得相當(dāng)重要了。作為一種選擇,開(kāi)發(fā)者可以從.NET基礎(chǔ)類庫(kù)中選擇更多的功能。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多