程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> .NET分布式事務處理

.NET分布式事務處理

編輯:C#入門知識

 

  在進行數據持久化的時候,我們會經常用到事務處理。一般情況下,ADO.NET中的事務處理就能夠滿足我們的需要,但是,ADO.NET中的事務不能同事對多個數據庫連接進行原子性的操作;如果在你的業務環境中存在多個數據庫、文件寫入等操作,同時需要保證數據完整性和一致性的時候,你可以考慮使用.NET提供的分布式事務處理。

  使用分布式事務處理,需要Windows系統的支持,所以,我們需要將系統的MSDTC服務開啟。步驟:管理工具>組件服務;依次展開 控制台根節點>組件服務>計算機>我的電腦;在“我的電腦”節點上右鍵打開“屬性”;在選項卡中勾選“使用本地協調器”,然後點擊“確定”按鈕,如下圖:

  設置完成以後,我們就可以很方便的使用分布式事務處理了。首先,在項目中添加“System.Transactions”引用,然後編寫如下代碼:

復制代碼 {
{
TransactionOptions transactionOption transactionOption.Timeout
{
action.Invoke();
scope.Complete();
}
}
} 復制代碼

 

  以上這段代碼是執行事務的核心代碼,你只需要將要執行代碼作為一個委托傳入InvokAction,並出入一個超時時間就可以了。在事務執行結尾,調用Complete方法,可以將事務提交。如果沒有調用Complete方法,即使事務執行完成,也不會進行提交。如果出現異常,所有代碼都不會改變。

----------------------------------------------------------

ps:

1.還發現一個問題,數據庫也需要開啟分布式事務的支持:右鍵“服務器連接”的屬性,在打開的屬性窗口選擇“連接”,在窗口右側,勾選“需要將分布式事務用於服務器到服務器的通信”,確定即可。

2.需要打開分布式的端口,端口號是135,或者添加System32下msdtc.exe的例外。

3.跨域的情況有待考究。

4.在事務中,即使存在嵌套的情況,同一個事務內的所有數據庫連接對數據都是可訪問的。

5.在事務中,如果使用Response.Redirect()方法跳轉到其它頁面,事務將無法提交!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved