使用 .NET TransactionScope 时 MSDTC 服务启用问题。






4.61/5 (27投票s)
如何使用 .NET TransactionScope 并启用 Microsoft 分布式事务协调器 (MSDTC)
引言
几天前,我发布了一篇关于在分布式数据库管理系统环境中使用 .NET TransactionScope
的技巧/窍门。在那篇文章之后,我认为我也应该包含直接涉及此新功能的 MSDTC 服务。例如,您的客户端应用程序请求事务,但应用程序执行失败并引发异常;一个常见的原因是 MSDTC 未启用。所以最后我决定应该与您分享……请注意,我已包含我之前(技巧/窍门)文章中的信息,这样您就不需要切换到那里。
SqlTransaction
快速概览
在分布式数据库管理系统上工作;我们都熟悉使用 SqlTransaction
。使用事务的目的是从前端获取您的 SqlTransaction
信息/状态,更重要的是添加调用回滚功能,这样您就可以在客户端-服务器应用程序模块上执行平滑的事务。
如何使用 .NET TransactionScope
如前所述,我们都熟悉 SqlTransaction
(.NET Framework 2.0)……我们不会讨论 SqlTransaction 的使用…… .NET 为我们提供了 System.Transaction
程序集,您可以在其中找到 System.Transactions.TransactionScope
类。与 SqlTransaction
相比,使用 TransactionScope()
更容易管理您的事务,需要编写几行代码来管理,调用 Commit
等。下面是一个示例代码片段
示例
TransactionOptions txOptions = new TransactionOptions();
using (TransactionScope txScope =
new TransactionScope(TransactionScopeOption.Required, txOptions))
{
try
{
// do something
txScope.Complete();
}
catch (SqlException sqlError)
{
// Manage exception
}
}
注意:您可能需要添加 System.Transactions
的引用。
使用此功能时要小心。如果您未能小心地在同一连接上执行事务的所有步骤,事务将被视为分布式(多数据库)事务,并会带来相当大的性能损失。请查看 Microsoft Enterprise Model 应用程序块,了解它们是如何管理的。
MSDTC 服务快速概览
Microsoft 分布式事务协调器 (MSDTC) 是一个事务管理器。此管理器的目的是允许客户端应用程序在一个事务中包含多个不同的数据源。MSDTC 服务在所有 Windows 平台上运行,当您使用 Microsoft 的 Personal Web Server 或 Microsoft SQL Server 等时,可能需要对 MSDTC 进行一些操作。
有关更多信息,请访问 此链接。
如何启用 MSDTC 服务
要启用 MSDTC 服务,您需要按照以下步骤操作
步骤 (I)
从以下位置之一打开您的组件服务
- 开始、管理工具,然后双击组件服务。
- 控制面板,打开管理工具,然后双击组件服务。
步骤 (II)
- 展开控制台根树中的组件服务节点。
- 您会找到“我的电脑”子节点,展开此节点,然后右键单击“我的电脑”节点,从弹出菜单中选择属性。
图 A 显示了步骤 1 的完成情况。
步骤 (III)
将显示一个带有某些选项卡(请参见图 B1)的属性窗口,现在
- 选择 MSDTC 选项卡。
- 单击安全配置按钮,将显示一个新的安全配置窗口。
- 选择/勾选网络 DTC 访问。
注意:还有一些其他安全设置选项,例如允许远程客户端、远程管理等。实际上取决于您的需求。最后,重新启动服务。
参考文献
- MSDN
- 感谢 Rob Graham
结论
我希望本文对您有所帮助。 祝您愉快!
历史
- 2010 年 1 月 25 日:首次发布