.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方法,即便事务执行完成,也不会进行提交。若是出现异常,全部代码都不会改变。工具

----------------------------------------------------------ui

ps:spa

1.还发现一个问题,数据库也须要开启分布式事务的支持:右键“服务器链接”的属性,在打开的属性窗口选择“链接”,在窗口右侧,勾选“须要将分布式事务用于服务器到服务器的通讯”,肯定便可。代理

2.须要打开分布式的端口,端口号是135,或者添加System32下msdtc.exe的例外。blog

3.跨域的状况有待考究。事务

4.在事务中,即便存在嵌套的状况,同一个事务内的全部数据库链接对数据都是可访问的。

5.在事务中,若是使用Response.Redirect()方法跳转到其它页面,事务将没法提交!

相关文章
相关标签/搜索