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


    首先是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里面最后一行如果不加回车的话是不识别最后一行的。  
  • 相关阅读:
    http 笔记2 url与资源
    计算机网络一些知识点
    Codeforces Round #652 (Div. 2) B. AccurateLee(思维)
    Codeforces Round #652 (Div. 2) C. RationalLee 贪心
    Codeforces Round #652 (Div. 2)D. TediousLee 推导
    Codeforces Round #652 (Div. 2) E. DeadLee 贪心
    Codeforces Round #651 (Div. 2) A Maximum GCD、B GCD Compression、C Number Game、D Odd-Even Subsequence
    js实现一棵树的生长
    安装python的selenium库和驱动
    Alice's mooncake shop HDU
  • 原文地址:https://www.cnblogs.com/newer/p/4274997.html
Copyright © 2020-2023  润新知