(comsvcs.h) ICrmLogControl::RegisterCompensator 方法
CRM 背景工作角色會使用此方法向CRM基礎結構註冊CRM補償器。 它必須是CRM背景工作角色呼叫的第一個方法,而且只能成功呼叫一次。 如果CRM背景工作角色在呼叫此方法時收到「復原進行中」錯誤碼,它應該再次呼叫此方法,直到收到成功為止。
語法
HRESULT RegisterCompensator(
[in] LPCWSTR lpcwstrProgIdCompensator,
[in] LPCWSTR lpcwstrDescription,
[in] LONG lCrmRegFlags
);
參數
[in] lpcwstrProgIdCompensator
CRM 補償器的 ProgId。 也會接受字串格式之CRM補償器的CLSID。
[in] lpcwstrDescription
監視介面要使用的描述字串。
[in] lCrmRegFlags
CRM COMpensator 應該接收哪些交易完成階段的 CRMREGFLAGS 列舉旗標,以及如果嘗試復原之後,不確定的交易是否仍會失敗。
傳回值
這個方法可以傳回下列值。
傳回碼 | 描述 |
---|---|
|
已成功完成命令。 |
|
NULL 指標是以自變數的形式提供。 |
|
已發生未預期的錯誤。 |
|
建立CRM Clerk的元件沒有交易。 |
|
CRM 記錄檔的復原仍在進行中。 |
|
復原CRM記錄檔失敗,因為不確定的交易仍會保留。 |
|
這個方法在錯誤狀態中呼叫;在 RegisterCompensator 之前,或在交易完成 (CRM 背景工作角色) 時。 |
|
發生記憶體不足錯誤。 |
|
CRM Compensator 不支援至少一個必要的介面, (ICrmCompensator 或 ICrmCompensatorVariants) 。 |
備註
lCrmRegFlags 參數可讓實作者決定 CRM Compensator 想要接收的交易完成階段。 某些CRM補償器可能會在準備階段執行任何工作,因此不需要接收準備通知;它可以改善效能,以指定在此情況下不需要任何準備階段。
建議將CRM背景工作角色和CRM補償器開發為「兩者」線程元件, (線程模型 = 任何Apartment) 。 不過,在某些情況下,這可能是因為語言條件約束 (,例如,使用 Visual Basic) 開發 CMS 時。 Apartment 線程 CRM Compensators (線程模型 = 單一線程 Apartment) 會在準備階段中死結,除非其同步處理屬性設定為「不支援」。 Apartment 線程 CRM 補償器的另一個替代方案是,如果不需要,則會略過準備階段。
在多個分散式交易協調器 (DDC) 的情況下,DTC 交易可能會進入不確定狀態。 一般而言,這是因為在交易期間發生中斷,而且無法連絡交易的產生者來找出交易的結果。 在此情況下,CRM 基礎結構無法判斷交易的結果。 CRM 實作者可以決定是否應該在此案例中允許新的交易。
在 RegisterCompensator 上指定「不確定時仍失敗」旗標,如果在復原後仍維持不確定的交易, 則 RegisterCompensator 的呼叫會失敗,並出現「復原失敗」錯誤碼。 如果未指定「如果不確定仍失敗」旗標,復原會成功、允許新的交易,且不確定的交易會保留在 CRM 記錄檔中。 當應用程式伺服器進程重新啟動) 時,CRM 基礎結構會在下一個復原 (再次嘗試解決這些不確定的交易。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | comsvcs.h |