共用方式為


內容啟用

在 COM+中,每個 COM 物件都會以相關聯的內容建立。 這表示必須建立並初始化新的內容,或使用適當的現有內容。 此程式稱為 啟用。 在 COM+中,物件會在自己的內容或建立者的內容中啟動(已要求啟動對象的物件,例如,藉由呼叫 CoCreateInstance)。

在某些情況下,例如使用 對象共用,會啟動物件,而不會從頭開始建立物件。 在此情況下,會在內容中啟動執行中的實例。 在其存留期內,可能會在不同的內容中重複啟動。

在任一情況下,基本機制都相同:對象與內容相關聯,且該內容已正確初始化,以表示對象的運行時間需求。

內容屬性的流動

當對象啟動以回應另一個物件的建立要求時,COM+ 必須在它們之間進行調解,才能正確啟動下游物件。 COM+ 必須比較呼叫端的內容與所呼叫元件的元件的元件,然後決定啟動下游元件的位置,以及如何初始化其內容屬性。

若要探索元件的元件的元件,COM+ 會在 COM+ 類別註冊資料庫中查閱它,其已針對極快速的運行時間查閱進行優化。 (這是由您在將元件安裝至 COM+ 應用程式時如何設定元件所決定。接著會根據呼叫端內容屬性的狀態來檢查元件的組態。

在某些情況下,組態與呼叫端的內容一致,而且元件可以在呼叫端的內容內啟用。 只有當呼叫端的內容符合新物件的所有運行時間需求時,才會發生此情況。

當下游元件無法在呼叫端的內容內啟用時,它會在適當的 Apartment 中於自己的內容中啟動。 發生這種情況時,特定內容屬性可能會從呼叫端流向被呼叫者。 例如,如果呼叫端與交易相關聯,且被呼叫者支援交易,新物件就會取得自己的內容(若要在交易中投票,它必須有自己的一致旗標),並繼承呼叫端的交易標識符和活動標識碼(位於相同交易和同步處理網域內)。

忽略的內容屬性

視元件設定方式而定,某些內容屬性在判斷在建立者的內容或本身內容中啟動它時,可能沒有任何作用。 例如,交易停用和同步處理停用設定,指出交易或同步處理網域的存在,在元件的啟用中將不會扮演任何角色。 當內容流動時,這些屬性基本上會被忽略。 或者,如果元件只使用進程層級存取檢查,則會忽略其安全性內容屬性—元件的安全性設定永遠不會在其啟用中扮演角色。

強制在呼叫者的內容中啟用

在某些情況下,您可能只想在其呼叫端的內容中啟動對象,也就是說,從未在自己的內容中啟動。 例如,您可能會想要在跨內容界限呼叫物件時控制其行為。

您可以使用元件服務系統管理工具,在元件 [屬性] 頁面的 [啟用] 索引卷標上選取 [必須在呼叫端內容中啟用] 選項,以確保對象無法在自己的內容中啟動。 (請參閱在呼叫端的內容中強制執行啟用,以取得逐步指示。當您選取此選項時,如果無法在呼叫端的內容中啟動物件,CoCreateInstance 就會失敗,並傳回CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT。

默認內容

默認內容存在以支援未設定的元件,也就是 COM+ 應用程式中未安裝 COM 元件,且未在 COM+ 類別註冊資料庫中註冊。 如果未設定的元件具有相容的線程模型,則會在呼叫端的內容中啟動它們。 否則,它們會在適當的 Apartment 的預設內容中啟動。 每個 Apartment 都有預設內容,可支援不使用 COM+ 服務的 COM 物件。

勾點啟用

藉由實作 IObjectControl::Activate IObjectControl::D eactivate,您可以將啟用和停用連結在一起,以在新內容中執行特殊初始化。 當物件設定為使用 JIT 啟用或對象共用時,COM+ 會在物件生命週期的特定時間點呼叫這些方法。 如需詳細資訊,請參閱 COM+ Just-In-Time 啟用COM+ 對象共用

攔截跨內容呼叫