标签:稳定性 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框架,随便一种都能将其秒杀。
标签:稳定性 cli hresult 最好 客户 事务管理 内容 dtc sql
原文地址:https://www.cnblogs.com/cr-cool/p/11416465.html