猿问

在某些机器上,TransactionScope自动升级到MSDTC?

在某些机器上,TransactionScope自动升级到MSDTC?

在我们的项目中,我们使用TransactionScope来确保数据访问层在事务中执行它的操作。我们的目标是要求在我们最终用户的机器上启用MSDTC服务.

问题是,在我们一半的开发人员机器上,我们可以在禁用MSDTC的情况下运行。另一半必须启用它,否则他们将获得“[server]上的MSDTC不可用”错误信息。

这真的让我绞尽脑汁,让我认真考虑回到一个基于ADO.NET事务对象的类似于TransactionScope的家用解决方案。这看起来很疯狂-同样的代码在我们的开发人员的一半上工作(而且不会升级)是吗?在另一个开发商那里升级。

我希望能有更好的答案跟踪事务升级到dtc的原因。但不幸的是,事实并非如此。

下面是一段会导致故障的代码示例,在试图升级的机器上,它尝试在第二个连接上升级。Open()(是的,当时没有其他连接打开)。

using (TransactionScope transactionScope = new TransactionScope() {
   using (SqlConnection connection = new SqlConnection(_ConStr)) {
      using (SqlCommand command = connection.CreateCommand()) {
         // prep the command
         connection.Open();
         using (SqlDataReader reader = command.ExecuteReader()) {
            // use the reader
            connection.Close();
         }
      }
   }

   // Do other stuff here that may or may not involve enlisting 
   // in the ambient transaction

   using (SqlConnection connection = new SqlConnection(_ConStr)) {
      using (SqlCommand command = connection.CreateCommand()) {
         // prep the command
         connection.Open();  // Throws "MSDTC on [SERVER] is unavailable" on some...

         // gets here on only half of the developer machines.
      }
      connection.Close();
   }

   transactionScope.Complete();}

我们一直在努力想办法解决这个问题。下面是它工作的机器的一些信息:

  • 开发1:Windows 7 x64 SQL 2008
  • 开发2:Windows 7 x86 SQL 2008
  • 开发3:Windows 7 x64

    SQL 2005 SQL 2008

它不工作的开发人员:

  • 开发4:Windows 7 x64,

    SQL 2008 SQL 2005

  • 开发5:WindowsVista x86,SQL 2005
  • 开发6:Windows XP X86,SQL 2005
  • My Home PC:WindowsVista家庭高级版,x86,SQL 2005

我要补充的是,为了寻找问题,所有机器都已经完全修补了MicrosoftUpdate提供的所有内容。


杨魅力
浏览 535回答 3
3回答

不负相思意

SQLServer 2008可以使用多个SQLConnection成一TransactionScope在不升级的情况下,只要连接不是同时打开的,这将导致多个“物理”TCP连接,因此需要升级。我看到您的一些开发人员使用SQLServer 2005,其他开发人员使用SQLServer 2008。你确定你已经正确地识别了哪些是升级的,哪些不是?最明显的解释是,使用SQLServer 2008的开发人员不会升级。
随时随地看视频慕课网APP
我要回答