.NET程序中的分布式事务(MS-DTC配置?!?)或者更确切地说是通过链接服务器存储过程?

时间:2012-11-14 07:41:43

标签: .net sql-server-2008 linked-server msdtc distributed-transactions

我们在不同的数据库服务器上有两个数据库(MS SQL Server 2008)。

我们需要在两个表中插入数据,一个在两个数据库服务器上,每个都需要在一个事务中,所以我们需要一个分布式事务。

我们正在从.NET程序中插入数据,我认为我们有两个选项:

在.NET中使用TransactionScope类启动分布式事务。这在我的开发机器上在测试环境中工作,但仅在我设置DTC以允许与网络通信之后。但是,.NET应用程序最终将在客户端计算机上运行,​​并且可能没有相应地在其操作系统上设置DTC。他们是“普通”用户,他们的计算机上没有管理员。

所以我的第一个问题是:即使未设置DTC,我是否可以在计算机上使用.NET中的TransactionScope类 - 是否可以通过我的.NET程序以编程方式解决这个问题?

如果.NET方式不是一个选项,那么使用通过链接服务器构建分布式事务的存储过程是否是个好主意?

感谢所有人的回复!

1 个答案:

答案 0 :(得分:1)

我的建议是依赖客户端计算机上的DTC。 DTC在受控环境中非常有用,即在服务器上,这与.NET完全无关(如果您使用本机COM / ADO则会如此)。虽然它可以在技术上运行,但很难在最终用户机器上以可靠的方式进行设置,而且您不希望将服务器事务性能与客户机/设置的行为深深地联系起来。

我建议您使用“面向服务”的方法,就像您建议的那样,创建一个从客户端隐藏分布式工作的Facade存储过程。换句话说,保留DTC以进行服务器到服务器的通信。