史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 程式 & 網頁設計技術文件
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2004-06-24, 03:56 PM   #1 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 COM, COM+ and .NET 的區別

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

  有兩種使程式碼重用的選項:

  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基礎類庫中選項更多的功能。
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
向 psac 送花的會員:
longlie (2007-10-21)
感謝您發表一篇好文章
 



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 12:55 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1