共用方式為


執行復原

資源管理員透過在資源故障後重新註冊交易參與者,協助解決交易中的持久性登記問題。

復原程式

若要註冊一項資源(由IEnlistmentNotification介面實作所描述)以在稍後具備復原資格,您應該呼叫EnlistDurable方法。 此外,您必須為 方法提供 EnlistDurable 資源管理員標識碼 (a Guid),以在發生資源失敗時一致地標記交易參與者。 基於這個理由,Guid提供給初始登記呼叫的 應該與復原期間呼叫中的 Reenlist 參數相同。 否則將拋出 TransactionException。 如需更多關於持久參與的資訊,請參閱 將資源編列為交易中的參與者

在 2PC 通訊協定的準備階段(階段 1)中,當您實作長期資源管理員收到 Prepare 通知時,它應該在此階段記錄其準備記錄。 記錄應該包含完成認可交易所需的所有資訊。 稍後可以在復原期間,藉由擷取 RecoveryInformationpreparingEnlistment 回呼的屬性來存取準備記錄。 記錄日誌不需要在Prepare方法內執行,因為RM可以在工作執行緒上進行這項作業。

復原程式包含下列兩個步驟:

步驟 1 - 重新入伍

資源管理員會檢查每個處於不確定狀態的登記項的準備信息記錄。 這是通過檢查在階段 1 期間傳遞至資源管理員的 RecoveryInformation 通知中的 PreparingEnlistment 回呼的 Prepare 屬性來完成。

針對它所檢查的每個這類登記,它會在交易管理員上叫用 Reenlist 。 這個方法會傳遞一個可識別資源管理員的唯一Guid,以及位元組陣列中的登記資訊。 傳回新的 Enlistment 物件。 如果重新登記因為發生例外狀況而失敗,資源管理員必須稍後重試。

只有在資源管理員從失敗重新啟動時,才應該呼叫 Reenlist 方法。 在兩階段提交的初始準備階段期間,您應該只重新納入資源管理員所記錄的未解析的交易。 任何嘗試在無效時間呼叫這個方法都可能會產生錯誤的結果。

使用此方法再度登記參與者時,會適當地呼叫對應至交易結果的階段 2 方法 IEnlistmentNotification(也就是 CommitRollbackInDoubt)。

步驟 2 - 完成復原

當所有重新登記完成時,資源管理員會呼叫 RecoveryComplete 方法。 此方法會完成復原程序,並通知交易管理員資源管理員已無未決交易。 如此一來,資源管理員保證不會再調用Reenlist方法。

在登記新交易之前,不需要資源管理員才能解決所有不確定的交易。 在資源管理員與交易管理員建立關聯性之後,可以隨時執行第一個步驟,但在 RecoveryComplete 叫用之後(步驟 2):無法再次執行步驟 1。 步驟 2 可以重複多次,而不會影響交易的結果。