共用方式為


在啟用期間尋找分割區

尋找要啟動元件的正確分割區,取決於下列各項:

  • 呼叫程式中用來啟動元件的函式呼叫和參數
  • 正在啟動的元件是本機還是遠端
  • 數據分割快取的內部使用

呼叫程式

COM+ 會根據呼叫程式如何啟動元件,選取元件啟用的數據分割。

選取元件啟用的數據分割時,COM+ 可以採取三種不同的動作。 所採取的動作取決於呼叫程式如何具現化物件,即函式呼叫是否包含分割區Moniker、由分割區標識碼和CLSID所組成,或只包含CLSID。

下表顯示 COM+ 可以依優先順序採取的各種動作,以找出分割區。

公式呼叫 參數 COM+ 動作
CoGetObjectGetObject
分割區 Moniker (包括分割區識別碼和 CLSID)
使用分割區Moniker中指定的分割區標識碼。
CoCreateInstance
CLSID
使用使用者身分識別預設分割區的數據分割標識碼,或在同一個進程中先前元件啟用期間新增至內容的數據分割標識符。

下表所列的 COM+ 動作會在下列各節中說明。

使用分割區Monikers

您可以使用分割區 Moniker 明確選取函數調用內的分割區。 分割區Moniker用於程式碼中,明確指定已啟動元件的分割區。 如果使用分割區Moniker來尋找分割區,就會從該分割區啟用。 也就是說,Moniker 中包含的分割區標識符優先於用戶的預設分割區,或存在於呼叫端內容中的分割區標識符。

在 C++ 程式代碼中,使用分割區 Moniker 的語法如下所示:

HRESULT CoGetObject(
  L"partition:partitionGUID/new:clsid",
  pBindOptions,
  IID_IUnknown,
  (void**)&pIUnknown);

下列範例顯示 C++ 程式代碼的代碼段,其中分割區 Moniker 正作為 CoGetObject 函式的自變數使用:

// Create CLSID1 configured in the Production partition.
HRESULT hr = CoGetObject(
  L"partition:{35056070-D5B7-4b59-9FBF-0D23417F6937}/new:CLSID1",
  pBindOptions, IID_IUnknown, (void**)&pIUnknown);

在 Visual Basic 程式代碼中,分割區 Moniker 的語法如下所示:

GetObject("partition:partitionGUID/new:CLSID") As Object

下列範例顯示 Visual Basic 程式代碼的代碼段,其中分割區 Moniker 正作為 GetObject 函式的自變數使用:

Dim objCLSID1 As Object
Set objCLSID1 = GetObject( _
   "partition:{35056070-D5B7-4b59-9FBF-0D23417F6937}/new:CLSID1")

使用預設對應

當 CoCreateInstance 函式用來啟動元件時,使用元件的 CLSID,COM+ 會使用預設的使用者身分識別對應,也就是使用者在 Active Directory 內對應的數據分割集。 不過,如果使用者未對應至 Active Directory 內的數據分割集,則會選取全域分割區。

使用分割區標識碼和對象內容

指派給新分割區的五個屬性之一是分割區標識符。 當用戶端程式呼叫 CoCreateInstance 函式來具現化物件時,分割區標識符會新增至內容。 使用內容中的分割區標識符來找出分割區很重要,因為它可確保啟動鏈結之後,除非透過分割區Moniker明確變更分割區標識碼,否則數據分割標識碼會維持不變。

如需在啟用期間尋找分割區的其他資訊,請參閱 COM+ 佇列元件和數據分割

本機和遠端啟用

  • 如果呼叫的元件存在於另一部計算機上,分割區屬性(包括數據分割標識符)會封送處理至其他計算機,而且元件會從封送處理的數據分割啟動。 如果未封送處理任何分割區標識符,COM+ 會使用對應至 Active Directory 內使用者身分識別的預設分割集。

數據分割快取

在網域環境中,COM+ 會使用 Active Directory 中的對應來找出正確的分割區以進行元件啟用。 不過,Active Directory 中的頻繁查閱可能會導致網路流量過多。 為了將 Active Directory 中使用者對數據分割集對應頻繁查閱所產生的網路流量降到最低,COM+ 會使用分割 區快取

數據分割快取包含使用者身分識別或 OU 與其數據分割集之間在 Active Directory 中建立的對應。 此分割區快取位於 COM+ 應用程式所在的應用程式伺服器上。

當 COM+ 需要判斷使用者的預設分割區或驗證使用者對分割區的訪問許可權時,它會在本機檢查分割區快取以查閱用戶的對應,而不是從遠端檢查 Active Directory。

如果分割區快取中的查閱失敗,COM+ 會檢查 Active Directory。 如果查閱在 Active Directory 中成功,COM+ 會將該對應儲存在分割區快取中。 下次針對該使用者對數據分割對應進行查閱時,COM+ 會在分割區快取中找到它。

下圖顯示 COM+ 用來尋找元件啟用分割區的程式。

Diagram that shows a troubleshooting tree for the process that COM+ uses to locate a partition for component activation.

快取的大小和快取專案的到期時間是透過登錄機碼來設定。 如需設定這些登錄機碼的資訊,請參閱 建立和設定 COM+ 數據分割

注意

如果伺服器計算機與網路中斷連線,而且在伺服器中斷連線時變更使用者對數據分割對應,分割區快取可能會包含過時的使用者對分割區對應。 如果使用者對分割區對應是用來啟動元件的機制,這可能會導致啟用錯誤。

尋找要啟用的元件