分布式事务中遇到的 “与基础事务管理器的通信失败”的解决方法

首先是ef的多数据库操作实现事务的方法 

 

复制代码
public int AddDifferenceDB(userinfo1 user1, userinfo user)
{
int result = 0; using (var test2DB = new test2Entities1()) { using (var test1DB = new test1Entities1()) { using (TransactionScope trans = new TransactionScope()) { try { test2DB.Set<userinfo1>().Add(user1); test1DB.Set<userinfo>().Add(user); result += test2DB.SaveChanges(); result += test1DB.SaveChanges(); trans.Complete(); } catch (Exception ex) { trans.Dispose();//出现异常,事务手动释放 Log log = new Log(); Task.Run(async () => await log.AsyncAddLog("xxx添加出错,事务已回滚", ErrorType.Error, ex));//写入错误日志,正式环境下把XXX更换成当前操作人的ID return -1; } } } } return result; }
复制代码

方法很简单。 没啥可说的。

主要是在

result += test1DB.SaveChanges();
的时候 总是出现错误。 各种各样的错误。。
但是从头到尾的解决办法还是有的。 按照这个步骤操作应该就能解决大部分人遇到的问题

1.检查msdtc服务是否开启

        1.在windows控制面版-->管理工具-->服务-->Distributed Transaction Coordinator-->(右键)属性-->安全
 
 
        2.在CMD下运行"net start msdtc"开启服务后正常。
2.检查防火墙,我是在本地做的测试,所以直接把防火墙关闭了,在正式服务器上是要配置入站规则和出站规则。
3.添加hosts
     在DB服务器上需要添加web服务器的机器名和地址。否则容易出现“ 与基础事务管理器的通信失败”这个错误。    
     需注意  hosts里面最后一行如果不加回车的话是不识别最后一行的。 

转载于:https://www.cnblogs.com/tiancai/p/5660889.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值