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

System.Transactions.TransactionManagerCommunicationException:分布式事务管理器 (MSDTC) 的网络访问已被禁用。请使用组件服务管理工具----> system.runtime.interopservices.comexception(0x8004D024)启用MSDTC安全配置中的网络访问DTC:事务管理器已禁用对远程/网络交易的支持。(HRESULT 的异常:0x8004D024) at System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32 propgationTokenSize, Byte[] propgationToken, IntPtr managedIdentifier, Guid& transactionIdentifier, OletxTransactionIsolationLevel& isolationLevel, ITransactionShim& transactionShim)....

我跟着 启用 MSDTC 的 Kbalertz 指南 在安装了该应用程序的电脑上,但仍然出现该错误。

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

没有正确的解决方案

其他提示

将此用于 Windows Server 2008 r2 和 Windows Server 2012 R2

  1. 点击 开始, , 点击 跑步, , 类型 dcomcnfg 然后单击 好的 打开 组件服务.

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

  3. 右键点击 本地故障码 然后单击 特性 显示 本地 DTC 属性 对话框。

  4. 点击 安全 标签。

  5. 复选标记 “网络DTC访问” 复选框。

  6. 最后勾选标记 “允许入站”“允许出站” 复选框。

  7. 点击 申请, 好的.

  8. 将会弹出一条消息 重新启动 服务。

  9. 点击 好的 就这样。

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

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

您还需要 MSDTC 吗?您遇到的升级通常是由于在单个 TransactionScope 内创建多个连接引起的。

如果您确实需要它,那么您需要按照错误消息中的概述启用它。在 XP 上:

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

我发现最好的调试方法是使用名为 数据传输协议

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

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

  • 如果您收到错误消息“Gethostbyname failed”,则表示计算机无法通过其名称找到另一台计算机 网络BIOS名称. 。例如,服务器可以解析并 ping 客户端,但这在 DNS 级别上起作用。不在 netbios 查找级别上。使用 WINS 服务器或更改 LMHOST(脏)将解决此问题。
  • 如果您收到错误“访问被拒绝”,则说明安全设置不匹配。您应该比较 msdtc 的安全选项卡并使服务器和客户端匹配。另一件需要注意的事情是 限制远程客户端 价值。根据您的操作系统版本以及更重要的是服务包的不同,该值可能会有所不同。
  • 其他连接问题:
    • 服务器和客户端之间的防火墙必须允许通过端口 135 进行通信。更重要的是,可以从两个站点发起连接(我与公司的防火墙人员遇到了很多问题,因为他们认为只有服务器才会打开到该端口的连接)
    • 该协议返回一个随机端口来连接以进行真正的事务通信。防火墙的人不喜欢这样,他们喜欢将端口限制在一定范围内。您可以使用密钥将 RPC 动态端口生成限制在一定范围内,如中所述 如何配置 RPC 动态端口分配以与防火墙配合使用.

根据我的经验,如果 DTCPing 能够建立从客户端发起和从服务器发起的 DTC 连接,那么您的事务就不再是问题了。

还可以看到 这里 有关如何从控制面板的 services.msc 打开 MSDTC。

在触发器驻留的服务器上,您需要打开MSDTC服务。您可以通过单击开始 > 设置 > 控制面板 > 管理工具 > 服务来执行此操作。找到称为“分布式事务协调员”的服务,然后右键单击(ON和SELECT)>启动。

必须在服务器和客户端这两个系统上启用 MSDTC。
另外,请确保系统之间不存在阻止 RPC 的防火墙。
诊断测试 是一个很好的 litt 应用程序,可以帮助您解决任何其他问题。

@担,

我不需要启用MSDTC即可运行交易吗?

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top