.NET分布式事务处理
在進行數據持久化的時候,我們會經常用到事務處理。一般情況下,ADO.NET中的事務處理就能夠滿足我們的需要,但是,ADO.NET中的事務不能同事對多個數據庫連接進行原子性的操作;如果在你的業務環境中存在多個數據庫、文件寫入等操作,同時需要保證數據完整性和一致性的時候,你可以考慮使用.NET提供的分布式事務處理。
使用分布式事務處理,需要Windows系統的支持,所以,我們需要將系統的MSDTC服務開啟。步驟:管理工具>組件服務;依次展開 控制臺根節點>組件服務>計算機>我的電腦;在“我的電腦”節點上右鍵打開“屬性”;在選項卡中勾選“使用本地協調器”,然后點擊“確定”按鈕,如下圖:
設置完成以后,我們就可以很方便的使用分布式事務處理了。首先,在項目中添加“System.Transactions”引用,然后編寫如下代碼:
class TransactionEx{
/// <summary>
/// 用事務執行一個方法,并設置超時時間
/// </summary>
/// <param name="action">方法代理</param>
/// <param name="timeout">超時時間</param>
public static void InvokAction(Action action, int timeout)
{
TransactionOptions transactionOption = new TransactionOptions();
transactionOption.Timeout = TimeSpan.FromSeconds(timeout);
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transactionOption))
{
action.Invoke();
scope.Complete();
}
}
}
以上這段代碼是執行事務的核心代碼,你只需要將要執行代碼作為一個委托傳入InvokAction,并出入一個超時時間就可以了。在事務執行結尾,調用Complete方法,可以將事務提交。如果沒有調用Complete方法,即使事務執行完成,也不會進行提交。如果出現異常,所有代碼都不會改變。
----------------------------------------------------------
ps:
1.還發現一個問題,數據庫也需要開啟分布式事務的支持:右鍵“服務器連接”的屬性,在打開的屬性窗口選擇“連接”,在窗口右側,勾選“需要將分布式事務用于服務器到服務器的通信”,確定即可。
2.需要打開分布式的端口,端口號是135,或者添加System32下msdtc.exe的例外。
3.跨域的情況有待考究。
4.在事務中,即使存在嵌套的情況,同一個事務內的所有數據庫連接對數據都是可訪問的。
5.在事務中,如果使用Response.Redirect()方法跳轉到其它頁面,事務將無法提交!
轉載于:https://www.cnblogs.com/youring2/archive/2011/06/12/MSDTC.html
總結
以上是生活随笔為你收集整理的.NET分布式事务处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 此时无法停用连接。这个连接可能在用一个或
- 下一篇: 【Vegas原创】mysql更改用户密码