这甚至是一个有效的问题吗? 我有一个使用MSTDC的.NET Windows应用程序,并且抛出异常:
System.Transactions.TransactionManagerCommunicationException: Network access for Distributed Transaction Manager (MSDTC) has been disabled. Please enable DTC for
network access in the security configuration for MSDTC using the Component Services Administrative tool ---> System.Runtime.InteropServices.COMException (0x8004D024): The transaction manager has disabled its support for remote/network
transactions. (Exception from HRESULT: 0x8004D024) at System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32
propgationTokenSize, Byte[] propgationToken, IntPtr managedIdentifier,
Guid& transactionIdentifier, OletxTransactionIsolationLevel&
isolationLevel, ITransactionShim& transactionShim)....
我按照Kbalertz指南在安装了该应用程序的PC上启用了MSDTC,但是仍然会发生错误。
我想知道这是否是数据库问题? 如果是这样,我该如何解决?
将其用于Windows Server 2008 R2和Windows Server 2012 R2
单击开始,单击运行,键入dcomcnfg,然后单击确定以打开组件服务。
在控制台树中,单击以展开"组件服务",单击以展开"计算机",单击以展开"我的电脑",单击以展开"分布式事务处理协调器",然后单击"本地DTC"。
右键单击"本地DTC",然后单击"属性"以显示"本地DTC属性"对话框。
单击安全选项卡。
选中"网络DTC访问"复选框。
最后,选中"允许入站"和"允许出站"复选框。
单击应用,
将弹出有关重新启动服务的消息。
单击确定,仅此而已。
参考:https://msdn.microsoft.com/zh-cn/library/dd327979.aspx
注意:有时本地计算机或服务器上的网络防火墙可能会中断您的连接,因此请确保为C:\Windows\System32\msdtc.exe创建规则以"允许入站"和"允许出站"连接
您甚至需要MSDTC吗?您遇到的升级通常是由在单个TransactionScope中创建多个连接引起的。
如果确实需要它,则需要按照错误消息中的说明启用它。在XP上:
-
转到管理工具->组件服务
-
展开组件服务->计算机->
-
右键单击->属性-> MSDTC选项卡
-
点击安全配置按钮
我发现最好的调试方法是使用称为DTCPing的Microsoft工具
将文件复制到服务器(DB)和客户端(Application server / client pc)
-
在服务器和客户端上启动它
-
在服务器上:填写客户端netbios计算机名称,然后尝试建立DTC连接
-
重新启动两个应用程序。
-
在客户端:填写服务器的netbios计算机名称,然后尝试建立DTC连接
我在旧公司网络中遇到了票价问题,并且有一些提示:
-
如果收到错误消息" Gethostbyname失败",则表示该计算机无法通过其netbios名称找到另一台计算机。例如,服务器可以解析和ping客户端,但是可以在DNS级别上工作。不在netbios查找级别。使用WINS服务器或更改LMHOST(脏)将解决此问题。
-
如果收到错误"拒绝访问",则安全设置不匹配。您应该比较msdtc的安全性选项卡,并使服务器和客户端匹配。要查看的另一件事是RestrictRemoteClients值。根据您的操作系统版本,更重要的是Service Pack,此值可能会有所不同。
-
其他连接问题:
-
服务器和客户端之间的防火墙必须允许通过端口135进行通信。更重要的是,可以从两个站点启动连接(我公司的防火墙人员遇到很多问题,因为他们认为只有服务器才能打开连接)在该端口上)
-
该协议返回一个随机端口以连接到实际事务通信。防火墙人员不喜欢这样,他们喜欢将端口限制在一定范围内。您可以使用如如何配置RPC动态端口分配以与防火墙一起使用中所述的键将RPC动态端口生成限制在一定范围内。
以我的经验,如果DTCPing能够建立从客户端启动和从服务器启动的DTC连接,则您的事务不再是问题。
也可以在此处查看如何从控制面板的services.msc打开MSDTC。
On the server where the trigger resides, you need to turn the MSDTC
service on. You can this by clicking START > SETTINGS > CONTROL PANEL > ADMINISTRATIVE TOOLS > SERVICES. Find the service called 'Distributed Transaction Coordinator' and RIGHT CLICK (on it and
select) > Start.
@担,
Do I not need msdtc enabled for
transactions to work?
仅分布式事务-涉及多个连接的事务。双重确保您只在事务内打开单个连接并且它不会升级-性能也会更好。
必须在服务器和客户端上的两个系统上都启用MSDTC。
此外,请确保在阻止RPC的系统之间没有防火墙。
DTCTest是一个不错的应用程序,可以帮助您解决任何其他问题。