簡介
COM是個開放的組件標準,它有很強的擴充和擴展能力,從COM到DCOM,再到MTS的發展過程也充分說明了這一點。對COM有使用經驗的讀者一定可以感覺到,雖然COM已經改變了Windows程式設計師的套用開發模式,把組件的概念融入到Windows套用中,但是由於種種原因,DCOM和MTS的許多優越性還沒有為廣大的Windows程式設計師所認識。MTS針對企業套用和Web套用的特點,在COM/DCOM的基礎上又添加了許多功能和特性,包括事務特性、安全模型、管理和配置等,MTS使COM成為一個完整的組件體系結構。由於歷史的原因,COM、DCOM和MTS相互之間並不很融洽,難以形成統一的整體,不過,這種狀況很快就要結束,因為COM+將把這三者有效地統一起來,形成一個全新的、功能強大的組件體系結構,並且把DCOM和MTS的各種優勢以更為簡捷的方式帶給Windows 2000程式設計師和用戶。COM+不再局限於COM的組件技術,它更加注重於分散式網路套用的設計和實現,已經成為Microsoft系統平台策略和軟體發展策略的一部分。COM+繼承了COM幾乎全部的優勢,同時又避免了COM實現方面的一些不足。COM+緊緊地與作業系統結合起來,通過系統服務為應用程式提供全面的服務,這一部分介紹COM+的基本結構。
特性
與 COM 一樣,COM+ 基於二進制組件和基於接口的編程。通過使用透明 RPC 層,可以跨越進程和計算機邊界進行遠程方法調用。正如 COM 組件那樣,COM+ 組件可以在成品中升級和擴展,而不會對使用它們的客戶端應用程式造成負面影響。與 MTS 一樣,COM+ 支持分散式事務和基於角色的安全性。它提供內置執行緒池方案,該方案與 MTS 的執行緒池方案一樣透明。COM+ 編程模型同樣利用偵聽通過聲明性屬性向開發人員公開平台服務。但是,COM+ 比 MTS 更進一步地利用了基於屬性的編程。除了事務性服務和集成安全性外,COM+ 還公開自定義對象構造、同步、對象池等服務。COM+ 的其他新功能(如排隊組件和 COM+ 事件)也通過可配置的屬性公開。
COM+並不是COM的新版本,我們可以把它理解為COM的新發展,或者為COM更高層次上的套用。COM+的底層結構仍然以COM為基礎,它幾乎包容了COM的所有內容。有一種說法這樣認為,COM+是COM、DCOM和MTS(Microsoft Transaction Server)的集成,這種說法有一定的道理,因為COM+確實綜合了這些技術要素。但更重要的一點是,COM+倡導了一種新的概念,它把COM組件軟體提升到套用層而不再是底層的軟體結構,它通過作業系統的各種支持,使組件對象模型建立在套用層上,把所有組件的底層細節留給作業系統。
COM是個開放的組件標準,它有很強的擴充和擴展能力,從COM到DCOM,再到MTS的發展過程也充分說明了這一點。對COM有使用經驗的讀者一定可以感覺到,雖然COM已經改變了Windows程式設計師的套用開發模式,把組件的概念融入到Windows套用中,但是由於種種原因,DCOM和MTS的許多優越性還沒有為廣大的Windows程式設計師所認識。MTS針對企業套用和Web套用的特點,在COM/DCOM的基礎上又添加了許多功能和特性,包括事務特性、安全模型、管理和配置等,MTS使COM成為一個完整的組件體系結構。由於歷史的原因,COM、DCOM和MTS相互之間並不很融洽,難以形成統一的整體,不過,這種狀況很快就要結束,因為COM+將把這三者有效地統一起來,形成一個全新的、功能強大的組件體系結構,並且把DCOM和MTS的各種優勢以更為簡捷的方式帶給Windows 2000程式設計師和用戶。
COM+不再局限於COM的組件技術,它更加注重於分散式網路套用的設計和實現,已經成為Microsoft系統平台策略和軟體發展策略的一部分。COM+繼承了COM幾乎全部的優勢,同時又避免了COM實現方面的一些不足。COM+緊緊地與作業系統結合起來,通過系統服務為應用程式提供全面的服務。
類型
進程內組件:組件是在主調應用程式的進程範圍內運行,是以DLL方式實現的。組件的實現是快速的,但由於和應用程式公用一個進程,導致了不安全的因素。進程外組件:它又可分為兩類。本地伺服器進程組件,它是組件與調用組件者在同一機器上;遠程伺服器進程組件,它是組件使用遠程過程調用RPCs和客戶應用程式進行通信。
套用
對Windows進行的任何技術討論,必然要包括對組件對象模型COM的討論。COM 是一種對象技術,已成為Windows 的全部(技術)的基礎,並且還是Microsoft 向Internet進軍的一部分。COM不僅與用戶相互作用,而且還是創建類似於應用程式中使用的按鈕之類的組件的技術基礎。換言之,不以某種方式討論一下COM,就不能開始對Internet的Windows或Microsoft版本進行討論。就在一年前,ActiveX還是表達Microsoft進軍Internet的新版COM的中心辭彙。但是,現在已經證明,ActiveX太龐大(儘管ActiveX控制項遠遠小於被它取代的OCX),太依賴於瀏覽器,而且對大多數人來說又有太多的安全風險。另外,Microsoft市場部正在用ActiveX來描述Microsoft正在發布的幾乎每一項新技術,這樣只能使客戶更加迷惑。
當COM+及分散式網際網應用程式(Distributed interNet Application,DNA)出現在Internet時,就又有了兩個新鮮而又激動人心的術語讓你學習了。ActiveX不再是描述Microsoft的COM技術諸個方面的術語,它僅關係到在應用程式或內部網站點中創建並使用的組件。如果你正在談論使能技術或DNA技術,如果你正在談論COM+技術的進展情況,那么在Internet上乾任何事現在都稱為COM+。
WEB連結 可以在上得到Microsoft種種最新的COM技術。這個站點可使你一直跟得上Microsoft正在引入的各種與COM相關的技術發展,以及預期它們是如何發展的。
事實上,作為C++程式設計師,需要了解相當多的基於COM的技術。下列章節將快速地瀏覽一下這些技術,並討論如何將它們放入一般方案中。顯然,在Microsoft升級其COM技術時,這種討論也會有所變化。
分散式COM(DCOM)──網路接口 COM的這一版允許組件和應用程式在網路上進行通信。DCOM設計得可以在相當多的網路協定──包括Internet使用的TCP/IP──上進行通信。DCOM 為開發人員所能做到的,是允許客戶的應用程式只要使用標準的COM接口,就可和運行於伺服器上的服務直接通信。實際上,這就意味著你可以設計一個控制項或一小段程式,使得客戶機的應用程式從伺服器接收數據,然後在本地對這些數據進行計算。另外,DCOM使得我們可以在客戶機和伺服器間進行安全通信,而不需關心所用的協定。
COM+──功能 標準COM接口擴充。它是現有的COM標準的擴充,使開發人員能利用特殊的COM+調用來設計高級的控制項。COM+提供的最重要的COM 擴充是數據捆綁,允許組件提供資料庫訪問。添加資料庫訪問,意味著可以使用COM+為能訪問遠程數據的Internet建立組件。COM+還是分散式網際網(DNA)體系結構的基礎,而 DNA 是Microsoft的最新的Internet版本。
理論上,DNA允許COM組件可以在任意平台上執行,並且允許開發人員可以使用任意語言寫出該組件。可以使用任意語言和任意平台進行工作的這部分能力,來源於一個稱之為偵聽器的COM+新特色。使用偵聽器允許COM+ 組件可以在運行期間調用多種服務,而不是依賴於某一具體服務。你將使用偵聽器接收和處理與實例創建、調用與返回、出錯以及實例刪除有關的事件。偵聽器還提供了處理事務及系統監督的機制。
Microsoft事務伺服器(MTS)──功能 COM伺服器。信不信由你,MTS是 COM的一部分,它允許開發人員創建“輕型(lite)”控制項,這種控制項集中於處理組件背後的事務邏輯,而不是處理組件所需要的全部接口。建立輕型控制項意味著能夠更快地創建它們,使用時下載時間更少。MTS將成為IIS4.x的一部分。
ActiveX──功能 組件建立。ActiveX最初是作為Internet的一項新技術而引入的,它是一種組件建立技術,它是Microsoft組件技術的第三個版本。將ActiveX從以前的OLE控制項擴充(OCX)中分離出來的原因之一是,可以在類似於Internet的高級潛在網路中使用它們。它們還設計得可以與瀏覽器一起工作,儘管在寫出本書時真正使用它們的唯一瀏覽器只有InternelExplorer。ActiveX 控制項的特色還包括增量繪製和代碼簽名,使得用戶可以在控制項執行前識別出它們的作者。
優點
COM+不僅繼承了COM所有的優點,而且還增加了一些服務,比如佇列服務、負載平衡、記憶體資料庫、事件服務等。佇列服務對於分散式套用非常有意義,特別是在現在網路速度很慢的情況下,這種機制可以保證套用系統能夠可靠地運行。在套用系統包含大量節點但伺服器又繁忙的情況下,客戶應用程式可以把它們的請求放到佇列中,當伺服器負載比較輕的時候再處理這些請求;又如COM+提供了負載平衡服務,它可以實現動態負載平衡,而且COM+應用程式的負載平衡特性並不需要編寫代碼來支持,客戶程式和組件程式都可以按通常的方式實現。獲得負載平衡特性並不是用程式設計的方式來實現的,而是通過配置實現分散式應用程式的負載平衡,如上所講的佇列服務,其實也反映了一種負載平衡。
(1) 真正的異步通訊。COM+底層提供了佇列組件服務,這使客戶和組件有可能在不同的時間點上協同工作,COM+套用無須增加代碼就可以獲得這樣的特性。
(2) 事件服務。新的事件機制使事件源和事件接收方實現事件功能更加靈活,利用系統服務簡化了事件模型,避免了COM可連線對象機制的瑣碎細節。
(3) 可伸縮性。COM+的可伸縮性來源於多個方面,動態負載平衡以及記憶體資料庫、對象池等系統服務都為COM+的可伸縮性提供了技術基礎,COM+的可伸縮性原理上與多層結構的可伸縮特性一致。
(4) 可管理和可配置性。管理和配置是套用系統開發完成後的行為,在軟體維護成本不斷增加的今天,COM+套用將有助於軟體廠商和用戶減少這方面的投入。
(5) 易於開發。COM+套用開發的複雜性和難易程度將決定COM+的成功與否,雖然COM+開發模型比以前的COM組件開發更為簡化,但真正提高開發效率仍需要藉助於一些優秀的開發工具。
COM+標誌著Microsoft的組件技術達到了一個新的高度,它不再局限於一台機器上的桌面系統,它把目標指向了更為廣闊的企業內部網,甚至Internet國際互連網路。COM+與多層結構模型以及Windows作業系統為企業套用或Web套用提供了一套完整的解決方案。