如何在SQL Server上启用MSDTC?

Dan*_*Dan 102 sql-server msdtc

这甚至是一个有效的问题吗?我有一个使用MSTDC的.NET Windows应用程序,它抛出异常:

System.Transactions.TransactionManagerCommunicationException:已禁用分布式事务管理器(MSDTC)的网络访问.请使用组件服务管理工具---> System.Runtime.InteropServices.COMException(0x8004D024)在MSDTC的安全配置中启用DTC以进行网络访问:事务管理器已禁用其对远程/网络事务的支持.(来自HRESULT的异常:0x8004D024)在System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32 propgationTokenSize,Byte [] propgationToken,IntPtr managedIdentifier,Guid&transactionIdentifier,OletxTransactionIsolationLevel&isolationLevel,ITransactionShim&transactionShim)....

我按照Kbalertz指南在安装了应用程序的PC上启用了MSDTC,但错误仍然存​​在.

我想知道这是否是数据库问题?如果是这样,我该如何解决?

Shi*_*ngh 119

用于Windows Server 2008 r2和Windows Server 2012 R2

  1. 单击" 开始",单击"运行",键入dcomcnfg,然后单击" 确定"以打开" 组件服务".

  2. 在控制台树中,单击以展开" 组件服务",单击以展开" 计算机",单击以展开" 我的电脑",单击以展开" 分布式事务处理协调器",然后单击" 本地DTC".

  3. 右键单击" 本地DTC",然后单击" 属性"以显示" 本地DTC属性"对话框.

  4. 单击" 安全"选项卡.

  5. 选中"网络DTC访问"复选框.

  6. 最后选中"允许入站""允许出站"复选框.

  7. 单击应用,确定.

  8. 将弹出有关重新启动服务的消息.

  9. 单击" 确定",这就是全部.

参考:https://msdn.microsoft.com/en-us/library/dd327979.aspx

注意:有时本地计算机或服务器上的网络防火墙可能会中断您的连接,因此请确保为"允许入站""允许出站"连接创建规则 C:\Windows\System32\msdtc.exe


And*_*ers 101

你甚至需要MSDTC吗?您遇到的升级通常是由在单个TransactionScope中创建多个连接引起的.

如果确实需要它,则需要按照错误消息中的说明启用它.在XP上:

  • 转到"管理工具" - >"组件服务"
  • 展开组件服务 - >计算机 - >
  • 右键单击 - >属性 - > MSDTC选项卡
  • 点击安全配置按钮

  • 感谢您对在单个TransactionScope中创建多个连接所导致的错误的评论.我收到了错误,这正是问题所在.我不想使用MSDTC,所以我找到了错误的新连接并重用了现有连接.谢谢! (20认同)
  • 我在Windows 7和8上,并且只有一个"默认协调器"部分.我在哪里可以获得您正在谈论的安全配置? (10认同)
  • 另外在Windows防火墙中我打开了端口135 TCP并添加了c:\ windows\msdtc.exe作为例外 (2认同)
  • 1)右键单击本地DTC并选择属性2)打开安全选项卡3)至少检查网络DTC访问,允许远程客户端和允许入站. (2认同)

Dav*_*man 19

我发现最好的调试方法是使用名为DTCPing的微软工具

  1. 将文件复制到服务器(DB)和客户端(应用程序服务器/客户端PC)
    • 在服务器和客户端启动它
    • 在服务器上:填写客户端netbios计算机名称并尝试设置DTC连接
    • 重启两个应用程序
    • 在客户端:填写服务器netbios计算机名称并尝试设置DTC连接

我在旧的公司网络中遇到了一些问题,我有一些提示:

  • 如果您收到错误消息"Gethostbyname failed",则表示计算机无法通过其netbios名称找到其他计算机.例如,服务器可以解析并ping客户端,但这可以在DNS级别上运行.不在netbios查找级别.使用WINS服务器或更改LMHOST(脏)将解决此问题.
  • 如果出现"Acces Denied"错误,则安全设置不匹配.您应该比较msdtc的安全选项卡,并使服务器和客户端匹配.另一件需要注意的是RestrictRemoteClients值.根据您的操作系统版本以及更重要的Service Pack,此值可能不同.
  • 其他连接问题:
    • 服务器和客户端之间的防火墙必须允许通过端口135进行通信.更重要的是,可以从两个站点启动连接(我的公司中的防火墙人员遇到很多问题因为他们假设只有服务器会打开连接到那个港口)
    • 该协议返回一个随机端口以连接到实际的事务通信.防火墙的人不喜欢这样,他们喜欢将端口限制在一定范围内.您可以使用密钥将RPC动态端口生成限制到某个范围,如如何配置RPC动态端口分配以使用防火墙中所述.

根据我的经验,如果DTCPing能够设置从客户端发起并从服务器启动的DTC连接,那么您的交易不再是问题.


Cam*_*llo 6

还可以在此处查看如何从控制面板的services.msc打开MSDTC.

在触发器所在的服务器上,您需要打开MSDTC服务.您可以通过单击开始>设置>控制面板>管理工具>服务来实现此目的.找到名为"分布式事务处理协调器"的服务并右键单击(在其上并选择)>启动.