如何在 SQLServer 上启用 MSDTC?

这个问题有效吗?我有一个。NET Windows 应用程序正在使用 MSTDC,它抛出了一个异常:

异常: 已禁用分布式事务管理器(MSDTC)的网络访问。请为 在 MSDTC 的安全配置中使用 Component Services Administration 工具——-> System 进行网络访问。运行时间。InteropServices.COMException (0x8004D024) : 事务管理器已经禁用了对远程/网络的支持 (来自 HResult T: 0x8004D024的异常) ,位于 System.Transactions PropgationTokenSize,Byte [] propgationToken,IntPtr managedIdentifier, 指南和事务标识符,OletxTransaction 隔离级别 & 隔离级别,ITransactionShim & TransactionShim)。

我在安装应用程序的 PC 上跟踪 启用 MSDTC 的 Kbalertz 指南,但错误仍然发生。

我想知道这是否是一个数据库问题? 如果是,我如何解决它?

254731 次浏览

在服务器和客户端两个系统上都必须启用 MSDTC。
另外,确保在阻止 RPC 的系统之间没有防火墙。
DTCTest 是一个很好的 litt 应用程序,可以帮助您解决其他问题

您甚至需要 MSDTC 吗? 您正在经历的升级通常是由在单个 TransactionScope 中创建多个连接引起的。

如果你确实需要它,那么你需要按照错误消息中的描述启用它:

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

@ 丹,

我不需要启用 msdtc 吗 交易工作?

只有分布式事务——那些涉及多个连接的事务。双重确保您只是在事务中打开一个连接,并且它不会升级——性能也会好得多。

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

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

我在以前的公司网络中遇到过很多问题,我有一些建议:

  • 如果您得到错误消息“ Gethostbyname 挂掉”,这意味着计算机无法通过其 Netbios 的名字找到另一台计算机。例如,服务器可以解析和 ping 客户端,但这在 DNS 级别上可以工作。在网络搜索层面上可不是这样。使用 WINS 服务器或更改 LMHOST (脏)将解决这个问题。
  • 如果您得到一个错误“访问被拒绝”,安全设置不匹配。您应该比较 msdtc 的安全选项卡,并使服务器和客户端相匹配。另一个要注意的是 限制远程客户端值。根据您的操作系统版本,更重要的是 ServicePack,这个值可能不同。
  • 其他连接问题:
    • 服务器和客户端之间的防火墙必须允许通过端口135进行通信。更重要的是,连接可以从两个站点启动(我公司的防火墙人员遇到了很多问题,因为他们认为只有服务器才会打开到该端口的连接)
    • 该协议返回一个随机端口以连接到实际的事务通信。防火墙的人不喜欢这样,他们喜欢把端口限制在一定的范围内。可以使用 如何配置 RPC 动态端口分配以使用防火墙中描述的键将 RPC 动态端口生成限制在一定范围内。

根据我的经验,如果 DTCPing 能够设置从客户机启动并从服务器启动的 DTC 连接,那么您的事务就不再是问题了。

还可以从 Control Panel 的 services.msc 中查看 给你关于如何打开 MSDTC 的内容。

在触发器所在的服务器上,需要转换 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 选择) > 开始。

此 Windows Server 2008 R2适用于视窗伺服器2012r2

  1. 单击 开始,单击 快跑,键入 你好,我是 dcomcnfg,然后单击 好的打开 组件服务

  2. 在控制台树中,单击展开 组件服务,单击展开 电脑,单击展开 我的电脑,单击展开 分布式事务协调器,然后单击 本地存款公司

  3. 右键单击 本地存款公司并单击 物业以显示 Local DTC Properties对话框。

  4. 单击 保安选项卡。

  5. Check mark “网络直接转帐接入” checkbox.

  6. 最后选中标记 "Allow Inbound"“允许外游”复选框。

  7. 申请好的

  8. 将弹出一条关于 重启服务的消息。

  9. 点击 好的就可以了。

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

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

MSDTC 可以配置为 MsDtc PowerShell 模块,例如:

# Import the module
Import-Module -Name MsDtc


# Set the DTC config
$dtcNetworkSetting = @{
DtcName                           = 'Local'
AuthenticationLevel               = 'NoAuth'
InboundTransactionsEnabled        = $true
OutboundTransactionsEnabled       = $true
RemoteClientAccessEnabled         = $true
RemoteAdministrationAccessEnabled = $true
XATransactionsEnabled             = $false
LUTransactionsEnabled             = $true
}
Set-DtcNetworkSetting @dtcNetworkSetting


# Restart the MsDtc service
Get-Service -Name MsDtc | Restart-Service

在支持分布式事务的每台机器上运行(例如,在 MSDTC 服务运行的地方)。