.NET分散式交易處理

來源:互聯網
上載者:User

在進行資料持久化的時候,我們會經常用到交易處理。一般情況下,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()方法跳轉到其它頁面,事務將無法提交!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.