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

.net NET程序(MS-DTC配置?)中的分布式事务,或者更确切地说是通过链接服务器在存储过程中的分布式事务?,.net,sql-server-2008,linked-server,msdtc,distributed-transactions,.net,Sql Server 2008,Linked Server,Msdtc,Distributed Transactions,我们在不同的数据库服务器上有两个数据库(MS SQL Server 2008) 我们需要在两个表中插入数据,在两个数据库服务器上各插入一个表,所有数据都需要在一个事务中,因此我们需要一个分布式事务 我们正在插入.NET程序中的数据,我认为我们有两种选择: 在.NET中,使用TransactionScope类启动分布式事务。这在我的开发人员机器上的测试环境中起作用,但只有在我设置了DTC以允许与网络通信之后。但是.NET应用程序最终将在客户端计算机上运行,并且客户端计算机可能没有相应地在其操作系统

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

我们需要在两个表中插入数据,在两个数据库服务器上各插入一个表,所有数据都需要在一个事务中,因此我们需要一个分布式事务

我们正在插入.NET程序中的数据,我认为我们有两种选择:

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

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

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

谢谢大家的回复

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


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

如果客户端的计算机与您的数据库有关,那么您的应用程序可能会有更多问题。您能详细说明一下吗?另外,为DTC配置所有内容是一个额外的步骤,需要花费太多的时间和精力。