【问题标题】:Distributed transaction in .NET program (MS-DTC config?!?) or rather in stored procedure via linked server?.NET 程序中的分布式事务(MS-DTC 配置?!?)还是通过链接服务器在存储过程中?
【发布时间】:2012-11-02 17:00:02
【问题描述】:

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

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

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

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

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

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

感谢大家的回复!

【问题讨论】:

  • 如果客户的机器与您的数据库有关,那么您可能会认为与您的应用程序有关。你能详细说明一下吗?

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


【解决方案1】:

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

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

【讨论】:

  • 另外,为 DTC 配置所有内容是一个额外的步骤,需要花费太多时间和精力。
猜你喜欢
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多