.NET分布式事务处理(转)

出处:http://www.cnblogs.com/youring2/archive/2011/06/12/MSDTC.html

在进行数据持久化的时候,我们会经常用到事务处理。一般情况下,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/smileberry/p/4303510.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值