在WF4.0中,主要有兩個和事務處理有關的類,TransactionScope和TransactedReceivescope。TransactionScope是用于一般工作流應用程式中的事務處理,TransactedReceivescope則是用于WCF的分布式應用程式中,可用于用戶端和伺服器的工作流通信。
本文主要說明TransactionScope活動的用法,當TransactionScope活動開始就會有一個新的System.Transactions.Transaction 事務,當内部活動都執行完成後會送出事務。
該活動主要有以下屬性:
Body:為事務中要執行的活動。
TimeOut:事務的過期時間。
AbortInstanceOnTransactionFailure:事務取消時是否取消工作流的執行。
IsolationLevel 指定事務的隔離級别,有下列值:
<b>成員名稱</b><b></b>
<b>說明</b><b></b>
Unspecified
正在使用與指定隔離級别不同的隔離級别,但是無法确定該級别。
Chaos
無法覆寫隔離級别更高的事務中的挂起的更改。
ReadUncommitted
可以進行髒讀,意思是說,不釋出共享鎖,也不接受獨占鎖。
ReadCommitted
在正在讀取資料時保持共享鎖,以避免髒讀,但是在事務結束之前可以更改資料,進而導緻不可重複的讀取或幻像資料。
RepeatableRead
在查詢中使用的所有資料上放置鎖,以防止其他使用者更新這些資料。防止不可重複的讀取,但是仍可以有幻像行。
Serializable
防止在事務完成之前由其他使用者更新或插入資料。
Snapshot
通過在一個應用程式正在修改資料時存儲另一個應用程式可以讀取的相同資料版本來減少阻止。表示您無法從一個事務中看到在其他事務中進行的更改,即便重新查詢也是如此。
多個TransactionScope活動嵌套的時候,如果内部的TransactionScope活動過期時間小于外部的TransactionScope活動過期時間。當這些TransactionScope活動的AbortInstanceOnTransactionFailure屬性都為true時,工作流會取消,将激發工作流的Aborted事件。如果該屬性設定不一緻,為False會激發工作流的OnUnhandledException事件。
可以通過RuntimeTransactionHandle的GetCurrentTransaction方法得到目前事務,如下:
RuntimeTransactionHandle rth = new RuntimeTransactionHandle();
rth = context.Properties.Find(rth.ExecutionPropertyName) as RuntimeTransactionHandle;
Console.WriteLine(" TransactionID: " + rth.GetCurrentTransaction(context).TransactionInformation.LocalIdentifier.ToString());
使用rth.GetCurrentTransaction(context).Rollback(e)可以復原目前事務。
本文轉自生魚片部落格園部落格,原文連結:http://www.cnblogs.com/carysun/archive/2009/12/02/WF4-TransactionScope.html,如需轉載請自行聯系原作者