共用方式為


使用不可部分完成交易的案例

下列案例將描述不可部分完成交易的用法。

案例 1:COM+ ServicedComponent 的不可部分完成交易

下列協調流程示範如何使用 RetryTransactionException 搭配不可部分完成的交易。 雖然在不可部分完成的範圍中無法直接包含例外狀況處理常式,但該範圍可以包含非交易式的範圍,非交易式的範圍中就可以具備例外狀況處理常式。 ServicedComponent會在相同的 DTC 交易中登記,並攔截元件引發的任何例外狀況,並重新擲回為RetryTransactionException。 (這假設 Retry 屬性已針對不可部分完成的範圍設定為 True) 。

請注意,即使未擲回 RetryTransactionException ,協調流程也會暫停,而且 MessageAssignment 圖形中的動作也會回復。 不過,這種模式可以使自動產生重試作業的應用程式更有恢復力。

具有 COM+ ServicedComponent 的不可部分完成交易

COM+ ServicedComponent BTS_Trans_Orch_Fig5不可部分完成的交易

案例 2:搭配不可部分完成交易使用交易配接器

下列的協調流程顯示如何以 SQL 配接器使用不可部分完成的交易。 整個協調流程會標示為針對兩個邏輯工作片段使用個別不可部分完成的交易執行:為客戶插入新的客戶和插入訂單詳細資料。

如果訂單插入工作因為任何原因而失敗,則客戶插入工作將會回復。 此範例使用 SQL 配接器來執行資料庫作業。 如前所述,與不可部分完成之交易相關的範圍,會在訊息傳送至 MessageBox 資料庫時完成。 這代表當引擎成功傳送 Scope_InsertCustomer 和 Scope_InsertOrder 範圍中的訊息之後,各範圍就會認可。 SQL 配接器會針對客戶或訂單的實際插入工作建立新的交易。

連接埠擁有 Delivery Notification 屬性,可驗證訊息已透過傳送埠而成功傳送。 當 Delivery Notification 屬性設定為 "Transmitted" 時,會在傳送作業的交易認可點之前放置接收訂閱。 不過,以不可部分完成的範圍來說,接收訂閱會放在包含此範圍的父範圍中。

在 InsertOrder SQL 交易失敗的案例中,會傳回 "Nack" 並認可 "Scope_InsertOrder"。 在傳送埠耗盡設定的重試次數後,就會引發 DeliveryFailureException。 此例外狀況會由預設的例外狀況處理常式所攔截 (該處理常式將執行預設的補償程序)。 如此將引發與 Scope_InsertCustomer 和 Scope_InsertOrder 相關聯的補償處理常式,導致客戶資訊插入作業復原。

注意

將這兩個範圍巢狀化於長時間執行的範圍中,以及從例外狀況處理常式叫用長時間執行範圍的補償圖形 (目標為長時間執行的交易),會導致與上述相同的行為。 您不能將整個協調流程標示為不可部分完成,因為不可部分完成的交易不允許巢狀化交易。

具有不可部分完成交易的交易配接器

交易式配接器與不可部分完成的交易