關於TransactionScope 使用


在去年的項目中使用了TransactionScope,現在總結下TransactionScope的使用說明

一、TransactionScope是.Net Framework 2.0之后,新增了一個名稱空間。它的用途是為數據庫訪問提供了一個“輕量級”[區別於:SqlTransaction]的事物。使用之前必須添加對 System.Transactions.dll 的引用。

 

二、代碼實例

//設置事務隔離級別
transactionOption.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
// 設置事務超時時間為60秒
transactionOption.Timeout = new TimeSpan(0060);

using (TransactionScope tran = new TransactionScope())
{

  try
                { tran.Complete(); }
                catch
                {}

}

三、在TransactionScope中默認的事務級別是Serializable,即在事務過程中,完全性鎖表。別的進程不能查詢,修改,新增,刪除。這樣會導致效率大大降低,雖然數據完整性很高。通常我們不需要那么

 

  所有的事務級別如下:

成員名稱 說明   

Chaos                      無法改寫隔離級別更高的事務中的掛起的更改。  

ReadCommitted        不可以在事務期間讀取可變數據,但是可以修改它。    

ReadUncommitted     可以在事務期間讀取和修改可變數據。    

RepeatableRead        可以在事務期間讀取可變數據,但是不可以修改。可以在事務期間添加新數據。    

Serializable               可以在事務期間讀取可變數據,但是不可以修改,也不可以添加任何新數據。  

Snapshot                  可以讀取可變數據。在事務修改數據之前,它驗證在它最初讀取數據之后另一個事務是否更改過這些數據。如果數據已被更新,則會引發錯誤。這樣使事務可獲取先前提交的數據值。 

四、在C#中使用TransactionScope類(分布式事務),則須注意如下事項

    1、在項目中引用using System.Transactions命名空間(先要在添加net組件的引用);

    2、對MSDTC組件設置:

         在控制面板--->管理工具--->服務 中,開啟Distributed Transaction Coordinator 服務。

         a、控制面板->管理工具->組件服務->計算機->我的電腦->右鍵->屬性

         b、選擇MSDTC頁, 確認"使用本地協調器"

         c、點擊下方"安全配置"按鈕  

         d、勾選: "允許網絡DTC訪問","允許遠程客戶端","允許入站","允許出站","不要求進行身份驗證".

         e、對於數據庫服務器端, 可選擇"要求對呼叫方驗證"

         f、勾選:"啟用事務Internet協議(TIP)事務"。

         g、在雙方防火牆中增加MSDTC.exe例外 可用命令行: netsh firewall set allowedprogram %windir%/system32/msdtc.exe MSDTC enable

     3、重啟IIS服務器。

五、使用分布式事務注意如下幾點

     1:確保參與事務的machine開啟了分布式事務支持;

     2:如果machine開啟了防火牆,需要設置msdtc進程為例外;

     3:參與事務的machine不能跨域(如果跨域,目前微軟還沒有確切的解決方案);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM