【开发心得】(MS DTC)已取消此分布式事务解决方案之一

108 篇文章 0 订阅
98 篇文章 1 订阅

目录

问题出现

原因分析

解决方案


今天是2021年第一个工作日,没想到就碰到了诡异问题:系统的不同用户执行同一个事务操作,结果有的可以,有的不可以!但本地测试,都是可以的!

于是,首先重启了服务器上所有的相关服务,然后问题依旧。

问题出现

经过查询后台日志,发现有如下报错:

分布式事务处理协调器(MS DTC)已取消此分布式事务

经过百度,发现都是说如何配置DTC角色和权限的,根据问题现象,感觉不是角色和权限的问题。

结合之前的反馈,发现这个用户对应的帐套在执行这个事务的时候,由于数据比较大,所以每次执行时间都很长,那么会不会是超时引起的呢?

原因分析

于是,赶紧查了一下系统配置config文件,发现其中有如下配置:

<system.transactions>
    <defaultSettings timeout="00:10:00"/>
</system.transactions>

10分钟,不短的。但是经过测试,发现此用户从执行到执行结束,基本上都是5分钟左右后台就报错了!

再查代码,终于发现问题原因!

this.transactionScope = new TransactionScope(TransactionScopeOption.Required,new TimeSpan(0, 5, 0));

原来,代码里也配置了超时时间,经过学习,这里的超时时间是优先于config文件的!难怪每次到5分钟的时候,后台就报错了!

解决方案

为了避免今后再出现歧义,也避免重复修改代码,最终采取了如下代码,这样在创建分布式事务的时候,会自动到config文件里去读取超时间,代码如下:

this.transactionScope = new TransactionScope(TransactionScopeOption.Required);//超时取config文件

反思上述过程,有一个疑问还没有解决:

之前在本地测试的时候,并没有出现上面的问题,而且感觉执行速度也比在服务器上的快很多,估计是服务器的生产环境对于事务的处理耗时更久。大家碰到过类似问题吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值