65.9K
CodeProject 正在变化。 阅读更多。
Home

MSDTC管理器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.80/5 (15投票s)

2014年2月20日

CPOL

5分钟阅读

viewsIcon

52460

downloadIcon

1229

MSDTC管理器

引言

分布式事务协调器 (MSDTC) 服务是 Microsoft Windows 现代版本的一个组件,负责协调跨多个资源管理器(如数据库、消息队列和文件系统)的事务。MSDTC 包含在 Windows 2000 及更高版本的操作系统中,也适用于 Windows NT 4.0。

分布式事务允许客户端应用程序在一个事务中包含两个或多个联网系统上的几个不同数据源。例如,当您的应用程序或服务从不同上下文中调用多个存储过程或实体框架语句时,您可以使用 DTC。

在任何数据驱动的应用程序中,使用事务都非常重要,它不仅与数据库操作相关,还可能涉及写入本地系统文件或注册表以及数据库操作。

有关 TransactionScope 用法和优点的更多详细信息,请阅读此文章:关于 TransactionScope 的所有内容

背景

在我开发一个使用实体框架作为数据访问层的企业 ERP 系统期间,该系统使用 System.Transactions 中的 TransactionScope 来维护和管理数据库操作。

唯一的问题是 MSDTC 是一个为分布式系统提供事务基础设施的 Windows 服务,该服务需要在数据库和应用程序机器上都启动并运行,您应该注意防火墙设置,并且还应该正确配置 MSDTC 的选项。

这将影响应用程序部署。

我提供这个库作为一种工具,可以通过您的程序管理 MSDTC,以避免用户 PC 上与 MSDTC 配置相关的任何故障,您也可以在您的系统安装自定义操作中使用它,以简化解决方案的部署,使其自动化且更有效,而不是为每个设备手动处理。

Using the Code

MsdtcManager 是您开始使用此库所需的类,首先您应该在代码中实例化它,所以让我们从它的构造函数开始。

您可以通过以下三种方式实例化 MsdtcManager

MsdtcManager(bool autoRestartService, int timeoutMilliseconds)   

两个参数构造函数

  • autoRestartService:如果为 trueMsdtcManager 将在每次配置更改需要服务重启时重启服务
  • timeoutMilliseconds:MsdtcManager 将等待 MSDTC 服务达到指定状态或指定超时到期的时间段,以毫秒为单位
MsdtcManager(bool autoRestartService) 

timeoutMilliseconds 默认值为 250 毫秒。

MsdtcManager();   

无参数默认构造函数,timeoutMilliseconds 默认值为 250 毫秒,autoRestartService 默认值为 false

一般属性

MsdtcManager 有两个与 MSDTC 服务相关的属性

属性数据类型可用选项
NeedRestart bool检测 MSDTC 服务在配置中任何需要服务重启的更改后是否需要重启。如果 autoRestartService 值为 true,将自动处理重启服务,否则您应该通过调用 MsdtcManager.RestartService(); 来重启服务

MSDTC 服务

MsdtcManager 有两个与 MSDTC 服务相关的属性

属性数据类型描述
IsServiceInstalled bool如果 MSDTC 服务已安装(如前所述,MSDTC 自 Windows 2000 起包含),则返回 true
IsServiceInstalledAndRunning bool如果 MSDTC 服务已安装并正在运行,则返回 true

MsdtcManager 包含以下方法来管理 MSDTC 服务

启动 MSDTC 服务。
方法返回值描述
GetServiceInfo() 服务信息返回包含有关 MSDTC 服务的一些信息的 struct
GetServiceStatus() ServiceControllerStatus返回服务的当前状态,有关更详细的信息,请参阅 ServiceControllerStatus
StartService()void启动 MSDTC 服务。
StopService()void停止 MSDTC 服务。
RestartService()void重启 MSDTC 服务。
InstallService() void安装 MSDTC 服务 
UninstallService()void卸载 MSDTC 服务。
RegMtxoci()voidMtxoci.dll 是一个动态链接库 (DLL),由 Microsoft ODBC Driver for Oracle 和 Microsoft OLEDB Provider for Oracle 在内部使用,与 Microsoft 分布式事务协调器 (DTC) 结合使用,为 Oracle 数据库提供事务支持。具体来说,它将 DTC 事务转换为 Oracle 可以理解的 XA 事务。此组件目前无法跟踪它接收到的 DTC 和应用程序消息,也无法跟踪它发送的 XA 消息。这使得解决某些问题变得极其困难。

防火墙

如果您使用 Windows 防火墙保护组织中的计算机,则必须将 MSDTC 添加到 Windows 防火墙设置中的例外列表中。为此,MsdtcManager 提供以下方法

属性数据类型描述
IsMsdtcRuleGroupEnabled(NET_FW_PROFILE_TYPE2_ profileType) bool如果 MSDTC 规则组在 Windows 防火墙中已启用,则返回 true,否则返回 false
EnableWindowsFirewallException(NET_FW_PROFILE_TYPE2_ profileType) void在 Windows 防火墙中启用 MSDTC 规则组
DisableWindowsFirewallException(NET_FW_PROFILE_TYPE2_ profileType) void在 Windows 防火墙中禁用 MSDTC 规则组

MSDTC 配置

MsdtcManager 提供以下属性和方法来处理 MSDTC 设置

属性 / 方法描述
NetworkDtcAccess 获取或设置值,该值确定本地计算机上的 MSDTC 是否可以访问网络。此设置必须与其他设置之一结合启用,才能启用网络 MSDTC 事务。
AllowInbound 获取或设置值,该值允许源自远程计算机的分布式事务在此计算机上运行。
AllowOutbound 获取或设置值,该值允许本地计算机发起事务并在远程计算机上运行。
AuthenticationRequired 获取或设置所需的身份验证类型,可用值:MutualAuthenticationRequiredIncomingCallerAuthenticationRequiredNoAuthenticationRequired
EnableXaTransactions MSDTC 可以充当符合 XA 标准的资源管理器或事务管理器。当 DTC 充当符合 XA 标准的资源管理器时,它允许 SQL Server、消息队列 (MSMQ) 和其他符合 OLE 事务标准的资源管理器参与由 X/Open DTP XA 标准事务处理监视器控制的事务。 
EnableSnaLuTransactions 支持 IBM CICS LU 6.2 事务。 
ResetToDefaultSettings 将 MSDTC 设置为其 Windows 安装时的默认值。

如果您想修改多个设置(通常这是最常见的场景),您应该使用默认的无参数构造函数实例化 MsdtcManager 或将 autoRestartService 设置为 false,带参数的构造函数(如果 autoRestartServicetrueMsdtcManager 将在每次更改后重启服务,这是不推荐的)在更改设置后,您可以检查是否需要重启服务并按如下所示重启它

           if (msdtcManager.NeedRestart)
            {
                msdtcManager.RestartService();
            }  

演示示例

该项目包含一个演示应用程序,以涵盖此库的所有功能。

我在下面添加了一个真实 DTC 属性窗口的屏幕截图,以便您了解 MSDTC 管理器几乎处理了大多数 DTC 属性。

关注点

此库基于此 MSDN 页面:分布式事务协调器
请仔细阅读它以了解您需要如何正确配置它,您也可以阅读此文章以了解如何手动设置配置:使用 .NET TransactionScope 时 MSDTC 服务启用问题。

更多参考资料: 

- 支持 XA 事务

- 支持 IBM CICS LU 6.2 事务 

历史

  • 2014-02-19 首次发布 (Beta 版)
  • 2014-02-27 版本 1  {新增:InstallService, UninstallService, ChangeLogonAccount, RegMtxoci, EnableXaTransactions, EnableSnaLuTransactions} 
© . All rights reserved.