【转】关于TransactionScope出错:“与基础事务管理器的通信失败”的解决方法

异常信息:

System.Transactions.TransactionManagerCommunicationException: 与基础事务管理器的通信失败。 ---> System.Runtime.InteropServices.COMException: 由于通信问题,MSDTC 事务管理器无法从源事务管理器提取事务。可能原因如下: 存在防火墙并且没有 MSDTC 进程的例外、两台计算机根据其 NetBIOS 名称无法找到彼此,或未对于两个事务管理器之一启用网络事务支持。 (异常来自 HRESULT:0x8004D02B)


解决办法:

一、对双方MSDTC组件设置
步骤:
1.控制面板->管理工具->组件服务->计算机->我的电脑->右键->属性
2. 选择MSDTC页, 确认"使用本地协调器"
3.点击下方"安全配置"按钮
4. 勾选: "允许网络访问","允许远程客户端","允许入站","允许出站","不要求进行身份验证".
5. 对于数据库服务器端, 可选择"要求对呼叫方验证"
停止分布式事务协调器服务,然后重新予以启动。   
停止参与分布式事务的任何资源管理器服务(如 Microsoft SQL Server 或 Microsoft Message Queue Server),然后重新予以启动。   
6.在双方防火墙中增加MSDTC.exe例外,可用命令行: netsh firewall set allowedprogram %windir%\system32\msdtc.exe MSDTC enable
7.dtC用到remoting的135端口,确保防火墙没有阻止

二、在数据库服务器(MSSQL)上的 hosts 文件中加入 Web 服务器(IIS) 的 IP 和 主机名 映射对  
1.定位到 C:\WINDOWS\system32\drivers\etc 目录
2.记事本打开 hosts 文件(没有扩展名)
3.添加一行 Web 服务器 IP 和 主机名映射, 如:
10.10.1.118 MyWebServerHostName
192.168.1.25 jack


你可能感兴趣的:(ADO.NET)