如何在SQL Server上启用MSDTC?
时间:2020-03-05 18:38:56 来源:igfitidea点击:
这甚至是一个有效的问题吗?我有一个使用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,但仍然会发生错误。
我想知道这是否是数据库问题?如果是这样,我该如何解决?
解决方案
回答
必须在服务器和客户端上的两个系统上都启用MSDTC。
另外,请确保阻止RPC的系统之间没有防火墙。
DTCTest是一个不错的应用程序,可以解决任何其他问题。
回答
我们甚至需要MSDTC吗?我们遇到的升级通常是由在单个TransactionScope中创建多个连接引起的。
如果确实需要它,则需要按照错误消息中的说明启用它。在XP上:
- 转到管理工具->组件服务
- 展开组件服务->计算机->
- 右键单击->属性-> MSDTC选项卡
- 点击安全配置按钮
回答
@担,
Do I not need msdtc enabled for transactions to work?
仅分布式事务涉及多个连接的事务。双重确保我们仅在事务内打开单个连接,并且不会升级性能也会更好。
回答
我发现最好的调试方法是使用称为DTCPing的Microsoft工具
- 在服务器上:填写客户端netbios计算机名称,然后尝试建立DTC连接
- 重新启动两个应用程序。
- 在客户端:填写服务器netbios计算机名称,然后尝试建立DTC连接
我在旧公司网络中遇到了票价问题,并且得到了一些提示:
- 如果收到错误消息" Gethostbyname失败",则表示该计算机无法通过其netbios名称找到另一台计算机。例如,服务器可以解析和ping客户端,但是可以在DNS级别上工作。不在netbios查找级别。使用WINS服务器或者更改LMHOST(脏)将解决此问题。
- 如果收到错误"拒绝访问",则安全设置不匹配。我们应该比较msdtc的安全性选项卡,并使服务器和客户端匹配。要查看的另一件事是RestrictRemoteClients值。根据操作系统版本,更重要的是Service Pack,此值可能会有所不同。
- 该协议返回一个随机端口以连接到实际事务通信。防火墙人员不喜欢这样,他们喜欢将端口限制在一定范围内。我们可以使用如如何配置RPC动态端口分配以与防火墙一起使用中所述的键将RPC动态端口生成限制在一定范围内。
以我的经验,如果DTCPing能够建立从客户端启动和从服务器启动的DTC连接,则事务不再是问题。