码迷,mamicode.com
首页 > 其他好文 > 详细

分布式事务TransactionScope所导致几个坑

时间:2019-08-27 10:37:54      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:稳定性   cli   hresult   最好   客户   事务管理   内容   dtc   sql   

记录一下,个人见解,欢迎指正

错误:

1.该伙伴事务管理器已经禁止了它对远程/网络事务的支持。 (异常来自 HRESULT:0x8004D025)
2.事务已被隐式或显式提交,或已终止
3.此操作对该事务的状态无效。

通过分析得到这个是与分布式事务有关的问题。。有以下解决办法:

1.设置 数据库的链接字符串属性:  Enlist=false    类似于:Data Source="*;Initial Catalog=*;User ID=sa;Password=sa;Enlist=false;"     其实Enlist这个玩意儿默认是为true的。。表示是否开启事务登记。。   关闭的话,自然而然的就没了以上分布式事务所带来的的问题。

2.设置分布式事务的隔离机制。 上面的错误其实就是分布式事务交叉使用,所带来的TransactionScope里SqlClient 连接出错。所以理论上设置事务的隔离机制是可以解决问题的。(这种我没有实现)

3.设置客户端和服务端的DTC。打开控制面板->管理工具->组件服务,右击"本地DTC",属性--安全下,全勾上,事务管理器通信中的勾选"不要求进行验证“。意思大致上位开启远程/网络的事务支持。详细内容可以自行搜索。。

以上三个解决方式,个人建议。要是离不开分布式事务的话,就第三种方式。不想用分布式用第一种办法。有时间精力的话,可以试试第二种。另说,TransactionScope这个玩意儿真的是最好不要使用,亲身体会其性能跟稳定性较差。现在这么多好的ORM框架,随便一种都能将其秒杀。

分布式事务TransactionScope所导致几个坑

标签:稳定性   cli   hresult   最好   客户   事务管理   内容   dtc   sql   

原文地址:https://www.cnblogs.com/cr-cool/p/11416465.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!