3

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

我们需要在两张表中插入数据,两台数据库服务器各一张,而且都需要在一个事务中,所以我们需要一个分布式事务。

我们从 .NET 程序中插入数据,我认为这里有两个选择:

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

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

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

谢谢大家的回复!

4

1 回答 1

1

我的建议是不要依赖客户端机器上的 DTC。DTC 在受控环境中非常有用,即在服务器上,这与 .NET 完全无关(如果您正在使用本机 COM/ADO,那将是真的)。尽管它在技术上可以工作,但很难在最终用户机器上以可靠的方式进行设置,而且您不希望将服务器事务性能与客户端机器/设置的行为紧密联系起来。

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

于 2012-11-14T08:14:58.587 回答