共用方式為


COM+ 資源配置器概念

應用程式元件會使用 COM+ 資源分配器來存取和管理共用、不可轉換的狀態資訊,例如元件與指定資源管理員之間的連線。 在運行時間,資源動態集區,例如資料庫連線、網路連線、佇列連線、線程、物件和記憶體區塊,都可供資源分配器使用。 應用程式程式會使用最少使用的資源數目來達到高效能。 資源分配器也可以自動化交易和回收。 (請參閱 自動資源回收 以取得此功能的詳細資訊。)

注意

資源是資源分配器所建立的任何專案。 例如,與資源管理員的連線是常見的資源。 資源位於資源分配器的記憶體中,且永遠不會複製到分配器管理員。 資源只能由不透明句柄 (RESID) 已知,而且可能無法執行交易。 雖然管理的資源通常是連線到管理永久性狀態的元件,但連線本身並不持久。 資源分配器通常會使用相關的資源管理員來保留永久性狀態。

 

在架構上,COM+ 資源分配器系統是由資源分配器和分配器管理員所組成。 資源分配器是使用者提供的元件,可為應用程式提供共用資源的簡單介面。 分配器管理員是由 COM+ 提供的元件,可協調各種資源分配器的活動。

資源分配器是提供至少兩個介面的動態連結庫 (DLL) 元件。 第一個 IDispenserDriver 會提供分配器管理員如何建立、終結及登記其所管理資源的基本資訊。 第二個會公開至應用程式,而且可以是 COM 介面或一組介面,也可以是透過匯入連結庫連結元件的應用程式程式設計介面(API)。 應用程式可以呼叫任何資源分配器,進而為應用程式提供任何 API。 如果資源分配器是自動化元件,可以從 Microsoft Visual Basic 存取它。 當應用程式元件參考資源分配器時,就會具現化資源分配器。

COM+ 提供的分配器管理員會追蹤資源分配器和其中座標。 它會實作兩個介面:IDispenserManagerIHolder。 資源分配器會使用 IDispenserManager 介面自行註冊。 分配員經理接著給他們一個IHolder的指標,他們用來通知分配員經理他們的活動。

交易式資源分配器必須在分散式交易協調器 (DTC) 交易中登記。 這表示使用符合 OLE 交易規範的內部或外部資源管理員(資源分配器)。

注意

COM+ 程式設計模型包含 宣告式交易,可協助保護應用程式物件在其存留期內執行的工作。 當應用程式物件使用 COM+ 資源分配器時,其執行的工作會自動交易式;也就是說,元件不需要明確宣告交易。 這些交易定義在 OLE Transactions 規格中,由 DTC 實作,並由 COM+ 代表應用程式物件起始。 如需詳細資訊,請參閱 DTC 開發指南。

 

資源不需要交易式。 集區非交易式資源的資源分配器仍可讓應用程式物件存取這些資源的共用集區,以達到高效能。 這種類型的資源分配器會從 IDispenserDriver::EnlistResource 方法傳回S_FALSE,這表示資源分配器不會登記資源,因為資源不是交易式資源。

資源分配器也可以獨立於 COM+運作,只提供資源分享功能。 例如,如果資源分配器公開 API(例如 ODBC),資源分配器可能是應用程式透過匯入連結庫存取的 DLL(或使用 LoadLibrary GetProcAddress 函式)。 資源分配器也可能是應用程式藉由呼叫 CoCreateInstance 存取的 COM 元件。 如果沒有 COM+,就無法呼叫資源分配器的 EnlistResource 方法,因為分配器管理員不知道目前的元件交易。

啟動時,資源分配器 DLL 必須向分配器管理員註冊自己。 分配器管理員是控制主管,可管理資源分配器的載入和卸除、提供 COM+ 內容,以及控制庫存統計數據管理員。 (如需詳細資訊,請參閱COM+ 分配器管理員。)資源分配器會先呼叫 GetDispenserManager 函式,然後呼叫 IDispenserManager::RegisterDispenser 方法,傳遞資源分配器所實作的 IDispenserDriver 指標。 此呼叫會傳回IHolder參考。

若要關閉,資源分配器會呼叫 IHolder::Close。 若要確保全新封裝關機,資源分配器必須能夠在 COM+ 要求分配器關閉之後,繼續從商業物件抵達時處理情況。

本節中的下列主題提供 COM+ 資源分配器服務的詳細資訊:

COM+ 資源分配器工作