国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

COM, COM+ and .NET 的區別(轉)

2024-07-10 13:07:34
字體:
來源:轉載
供稿:網友
作者:sunwen譯

所有的優秀程序員都會盡自己的最大努力去使自己所寫的程序具有更好的可重用性,因為它可以讓你快速地寫出更加健壯和可升級性的程序。

有兩種使代碼重用的選擇:
1. 白盒:最簡單的一種,就是把你的程序片拷貝到另一個文件中。
2. 黑盒:它包括把編譯過的程序片連接起來。因此客戶端可以調用的編譯過的黑盒類庫就叫作組件。

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

com的產生

在以前程序設計過程中,程序員把它們的函數庫放在一個叫做目標(object)文件的單獨文件中,在這些文件中,包含了編譯過的代碼。當程序員要使用一個特別的目標文件的時候,他們把客戶程序編譯成機器代碼,然后依靠動態鏈接的手段把客戶程序聯接到目標文件上,最后變成一個單一的可執行文件。這種作法的唯一的好處在于它節省了編譯函數庫的時間。但是它有許多的缺點,比如由于在每個單獨的可執行文件中都有一個程序庫包括在里面,浪費了許多存儲空間;對應用程序的維護也是非常困難的,如果在函數庫中發現了一個bug,整個可執行文件都要被重新編譯和分發。

還有不只一個的嚴重的限制在里頭,一個客戶應用程序必須要和用同一種語言編制的函數庫在一起才能使用。比如說,一個用quickbasic寫的客戶應用程序就不能引用一個用c++寫的函數庫。

因此,微軟公司出品了com,com僅僅只是一個規范。不管組件用什么語言寫成,只要符合這個com規范,就能被用任何一種語言寫成的客戶程序調用。此外,程序員不必再擔心要去建立一個單一的可執行文件,因為組件是以guid(global unique identifier全球唯一標識符)來標識的。guid是一個128位的號碼,和一些相關的信息一起被放在系統的注冊表中,用來唯一標識組件。客戶應用程序只在運行期間才動態地建立一個組件的實例,并使用這個組件的功能,因此,只需要一個函數庫的拷貝。它的缺點就是大家常常提到?quot;dll地獄"。這個問題在一個dll要被一個新版本的dll所取代時引發。開發者不得不通過關閉所有的客戶應用程序的方法(如果不行,還要關閉www服務)來達到清除所用對這個組件的引用的目的。有時所有的方法都還起不了作用,那你只好重新啟動服務器后才能替換掉老的dll。

com+

為了讓企業級的應用程序能使用上com,它必需要有以下的特定的能力。
· 驗證能力
· 對象池(object pooling)
· 事務處理
· 支持分布式架構
為了使開發者不必去為他們的組件添加這些能力,微軟公司出品了dcom(distributed com分布式com)和mts(microsoft transaction server微軟事務服務器)。使用這兩種技術,開發者就可以把精力用在他們的商業邏輯上,而不必放在后臺的他們的組件上。

dcom是一個用于分布式的組件之間的通訊的rpc(remote procedure call)協議。客戶端向一個本地機的代理類發送請求,然后由代理類將這個請求隱含地給安裝在遠程機器上的"根"類,然后執行結果原路送回給代理類,最后代理類把它們回送給客戶端。因此,客戶程序的位置完全與組件的位置無關。dcom的缺點在于,由于dcom使用的是一個獨立的硬件端口,而不是http協議的80端口,所以在組件間通訊的過程中,必須保證這個端口是開著的。這是一個嚴重的安全問題。所以dcom不能夠輕易地穿越防火墻。

為了使用mts,程序員在它們的組件里放置特別的mts鉤子,編譯后把他們放在mts包中。把有關系的組件放在一個單一的包中有它自己的好處。當客戶請求一個包中的一個組件的一個實例的時候,mts確保為這個包建立一個新的專門的線程,一個新的組件實例被建立在這個線程上并被應用事務服務。至于對象池服務和安全服務是否要被建立,那就要看開發者的請求了。

mts允許相關的作業單元被當作一個事務來對待,這意味著如果所有的作業單元被成功地完成,整個事務就被當作成功地完成,反之如果有一個單元未成功完成,整個事務將被重新輪回。

在客戶請求對象和釋放對象后,mts仍保存著這個對象,所以當另一個客戶請求同一個組件的時候,mts就將保存著的對象交給它。通過這種方式,mts減少了在服務器源實例化的次數。

mts允許開發者用安全措施來組裝他們的組件,以使其具有識別請求它的服務的客戶的能力。這能夠確保未經授權的客戶不能夠使用組件的功能。

mts以com+的名義被完整地整合到了微軟公司的windows 2000操作系統中,但是com+不僅僅只有mts,它還包括一些其它的服務。msmq(microsoft message queue server),一個與mts一同發布的服務,也被以com+的名義整合到了windows 2000中。msmq允許服務器端和客戶端進行同步的通訊。事件服務(event service)也被加了進來,它使服務器能夠與客戶端同步地交流事件的發生。負載平衡服務(load balancing)自動地實例化機器上的具有最多資源的服務器上的請求對象。

.net

.net提供了一種全新的建立和展開組件的方法。它就是大名鼎鼎的assemblies。使用com,開發者必需要在服務器上注冊組件,這也就是說,系統注冊表中的組件的信息必須被更新。這樣做的目的是保證組件的中心位置,以使com+能夠找到合適的組件。使用.net的assemblies,裝配(assembly)文件把所有需要的元數據(meta data)都壓入一個叫manifests(名單)的一個特殊的段中。在.net中,要使assembly對用戶有效,只要簡單地把他們放在一個目錄中就行了。當客戶程序請求一個特別的組件的實例的時候,.net運行期(runtime)在同一個目錄搜尋assembly,在找到后,分析其中的manifest,以取得這個組件所提供的類的信息。由于組件的信息是放在manifest里的,所以開發者就沒有必要把組件注冊到服務器上,因此,就可以允許幾個相同的組件安全地共存在一個相同的機器上了。

建立一個.net assembly并不像建立一個vb6組件,唯一讓開發者操心的就是商業邏輯,所有的后臺代碼全部由.net運行期產生,而且由于.net運行期具有碎片收集器的功能,組件不必擔心它的引用數目(在com中是靠iunknown的幫助)。簡單地說,在.net中建立一個assembly比建立一個vb6 com要簡單地多。

純的.net assemblies不能夠在com+服務下注冊,因為它們是和com不同的二進制標準。面對.net,assemblies的前景相對于com來說是"高級的com"。但是由于當前架構于com+上的應用程序的可靠性,com還會持續一段時間。這也許就是微軟公司向開發者同時提供開發.net assemblies和com的工具的原因吧。

類型庫引入器(type library importer (tlbimp.exe))工具可以把com組件封裝成.net,以使以前的東西可以在.net應用程序中繼續使用。

類型庫導出器(type library exporter (tlbexp.exe))工具將.net組件封裝成com,這個工具也是很有用的,如果你要用你的.net assemblies去替換原有的com組件,就得用到它了。由com+提供的服務不能被忽略,所以把.net assemblies封裝成com組件就變得相當重要了。作為一種選擇,開發者可以從.net基礎類庫中選擇更多的功能。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新乡县| 洪湖市| 岱山县| 台南市| 安顺市| 扶风县| 文成县| 调兵山市| 高淳县| 辽阳市| 彭水| 海林市| 松溪县| 普安县| 句容市| 黔东| 阳东县| 双牌县| 淮南市| 来凤县| 桓台县| 澎湖县| 西畴县| 远安县| 金门县| 康马县| 景谷| 黄浦区| 靖江市| 亚东县| 哈巴河县| 虎林市| 会昌县| 永川市| 崇州市| 崇文区| 额尔古纳市| 东台市| 溧水县| 林芝县| 清远市|