开发者社区 问答 正文

代码中使用了分布式事务TransactionScope,日志中出现已禁用对分布式事务管理

代码中使用了分布式事务TransactionScope, 系统在运行中提示“ System.Transactions.TransactionManagerCommunicationException: 已禁用对分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具启用 DTC 以便在 MSDTC 安全配置中进行网络访问。 ---> System.Runtime.InteropServices.COMException: 该事务管理器已经禁止了它对远程/网络事务的支持。 (异常来自 HRESULT:0x8004D024)
   在 System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32 propgationTokenSize, Byte[] propgationToken, IntPtr managedIdentifier, Guid& transactionIdentifier, OletxTransactionIsolationLevel& isolationLevel, ITransactionShim& transactionShim)
   在 System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken(Byte[] propagationToken)”,云数据库RDS支持这个写法么?还有该如何配置服务?

展开
收起
297610615742221858 2019-03-17 08:13:12 1170 分享 版权
阿里云 AI 助理回答

问题分析

根据错误提示信息,系统在运行分布式事务时抛出了以下异常:

System.Transactions.TransactionManagerCommunicationException: 已禁用对分布式事务管理器(MSDTC)的网络访问。

该问题的核心原因是 MSDTC(Microsoft Distributed Transaction Coordinator) 的网络访问功能未启用,导致分布式事务无法正常工作。MSDTC 是 Windows 系统中用于协调分布式事务的关键组件,若其安全配置中禁止了网络访问,则分布式事务将无法跨网络或远程资源执行。


解决方案

要解决此问题,需要启用 MSDTC 的网络访问功能,并确保其安全配置允许分布式事务的正常运行。以下是详细的操作步骤:

1. 启用 MSDTC 的网络访问功能

通过 Windows 的 组件服务管理工具 配置 MSDTC 的安全设置:

  1. 打开 组件服务管理工具

    • Win + R 键,输入 dcomcnfg,然后按回车。
    • 在弹出的窗口中,依次展开 组件服务 > 计算机 > 我的电脑
  2. 配置 MSDTC 安全设置:

    • 右键点击 我的电脑,选择 属性
    • 切换到 MSDTC 选项卡,点击 安全配置 按钮。
    • 在弹出的 安全配置 窗口中,勾选以下选项:
      • 网络 DTC 访问
      • 允许远程客户端
      • 允许远程管理
      • 允许入站
      • 允许出站
      • 不要求进行身份验证(如果需要更高的安全性,可以选择要求身份验证,但需确保所有参与方都支持)。
    • 点击 确定 保存配置。
  3. 重启 MSDTC 服务:

    • 打开 服务管理器(按 Win + R 键,输入 services.msc)。
    • 找到 Distributed Transaction Coordinator 服务,右键点击并选择 重启

2. 检查防火墙设置

确保防火墙未阻止 MSDTC 的通信端口(默认为 TCP 135 和动态分配的 RPC 端口)。如果防火墙启用了限制规则,需添加例外:

  1. 打开 Windows 防火墙高级设置
  2. 创建入站和出站规则,允许以下内容:
    • TCP 端口 135
    • 动态分配的 RPC 端口范围(通常为 49152-65535)。
  3. 如果使用的是云服务器(如阿里云 ECS),还需在安全组规则中开放上述端口。

3. 验证 MSDTC 配置

完成上述配置后,可以通过以下方式验证 MSDTC 是否正常工作:

  1. 使用 DTCPing 工具 测试分布式事务的连通性:

    • 下载并安装 DTCPing 工具(可通过微软官网获取)。
    • 在客户端和服务端分别运行 DTCPing,确保双方能够成功建立连接。
  2. 运行简单的分布式事务代码,验证是否仍出现异常。


注意事项

  • 权限问题:确保运行分布式事务的应用程序具有足够的权限访问 MSDTC。建议以管理员身份运行应用程序。
  • 跨域问题:如果分布式事务涉及多个域或网络环境,需确保所有参与方的 MSDTC 配置一致,并且网络连通性正常。
  • 性能影响:启用 MSDTC 的网络访问可能会增加系统的资源消耗,建议仅在必要时启用。

总结

通过启用 MSDTC 的网络访问功能、调整安全配置以及检查防火墙规则,可以有效解决“已禁用对分布式事务管理器(MSDTC)的网络访问”的问题。完成配置后,建议使用 DTCPing 工具验证连通性,确保分布式事务能够正常运行。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答