如何在SQL Server上启用MSDTC?

如何在SQL Server上启用MSDTC?

How do I enable MSDTC on SQL Server?

这甚至是一个有效的问题吗? 我有一个使用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是一个不错的应用程序,可以帮助您解决任何其他问题。


    推荐阅读