可集區物件的需求
可集區對象必須符合特定需求,才能讓多個用戶端使用單一對象實例。
無狀態
為了維護安全性、一致性和隔離,可集區對象應該不會保留用戶端對用戶端的用戶端特定狀態。 您可以使用 IObjectControl 管理任何個別客戶端狀態,使用 IObjectControl::Activate 執行內容特定的初始化,並使用 IObjectControl::D eactivate 清除任何客戶端狀態。 如需詳細資訊,請參閱 控制物件存留期和狀態。
無線程親和性
可集區對象無法系結至特定線程;否則,效能可能會是災難性的。 基於這個理由,無法將可集區對象標示為在Apartment模型中執行;它們必須在多線程公寓或中性公寓中執行。 此外,可集區物件不應該使用線程本機記憶體,也不應該匯總自由線程封送處理器。 如需 COM+中線程的詳細資訊,請參閱 COM+ 線程模型。
注意
Microsoft Visual Basic 6.0 和更早的開發環境只能建立 Apartment 模型元件。 不過,在 Visual Basic .NET 中,元件可以集區化。
可彙總
可集區對象必須支持匯總,也就是說,必須使用非 NULL pUnkOuter 自變數叫用 CoCreateInstance 來建立它們。 當 COM+ 啟動集區物件時,它會建立匯總來管理集區物件的存留期,以及在 IObjectControl 上呼叫方法。 如需撰寫可匯總對象的詳細資訊,請參閱 匯總。
交易式元件
參與交易的可集區對象必須手動登記受控資源。 當集區時,如果您的物件保存受控資源,例如資料庫連接,當物件在指定內容中啟動時,資源管理員將無法自動登記在交易中。 因此,物件本身必須處理偵測交易的邏輯、關閉資源管理員的自動登記,並手動登記其保存的任何資源。 此外,交易集區對象應該會在 IObjectControl::CanBePooled 的參數值中反映其資源的目前狀態。 如需詳細資訊,請參閱 共用交易物件。
實作 IObjectControl 來管理物件存留期
可集區對象應該實 作 IObjectControl,但不需要這麼做。 不過,集區的交易式元件必須實 作 IObjectControl。 這些元件應該監視其保留的資源狀態,並指出其何時無法重複使用;當 IObjectControl::CanBePooled 傳回 false 時,它將會讓交易失敗。 如需詳細資訊,請參閱 控制物件存留期和狀態。
語言限制
使用 Microsoft Visual Basic 6.0 和更早版本開發的元件無法集區,因為這些元件將會是 Apartment 模型線程。 不過,在 Visual Basic .NET 中,元件可以集區化。
舊版元件
只要它們不是非交易式,且符合適當的先前需求,即使元件並未特別以共用功能撰寫,仍可集區化。 不需要實 作 IObjectControl;不這麼做的元件不會參與管理其存留期。 如果未 實作 IObjectControl::CanBePooled ,物件將會繼續重複使用,直到集區達到大小上限為止。
相關主題