【问题标题】:Distributed Transaction Coordinator分布式事务协调器
【发布时间】:2009-04-28 06:06:29
【问题描述】:

我正在尝试跨多个系统进行数据库事务(插入记录)。所以,我决定在 .net 中使用 System.Transaction 命名空间。我在两个系统上都配置了 MSDTC(但我不知道我是否配置正确)。我的事务有两个插入查询,一个将在本地系统执行。另一个,将在本地网络中的某个其他系统上执行。 第一个插入查询成功,但第二个引发错误,如: Message = "事务已被隐式或显式提交或中止。"


这是我的代码

    using (TransactionScope txSc = new TransactionScope())
    {
        //vrm = new VolatileRM();
        //vrm.SetMemberValue(3);
        try
        {
            using (SqlConnection cn = new SqlConnection(connStr1))
            {
                SqlCommand cmd = cn.CreateCommand();
                cmd.CommandText = "Insert into empdetail Values ('YYY')";
                cn.Open();
                cmd.ExecuteNonQuery();
                cn.Close();
            }
            using (SqlConnection cn = new SqlConnection(connStr))
            {
                SqlCommand cmd = cn.CreateCommand();
                cmd.CommandText = "Insert into stu Values ('23','senthil')";
                cn.Open();
                cmd.ExecuteNonQuery();
                cn.Close();
            }                    
            txSc.Complete();
        }
        catch (Exception e)
        {
            txSc.Dispose();
        }

    }

【问题讨论】:

  • 您能否编辑以包含包含整个事务的代码。
  • @Partha:只是想知道您是否会接受答案?

标签: msdtc


【解决方案1】:

首先检查 DTC 是否实际运行(在本地和远程系统上),然后尝试将 DTC 的身份验证设置为“匿名”,看看是否是权限问题。

另外,检查远程和本地机器上的防火墙设置。

查看此常见问题解答:Distributed Transaction Coordinator(MSDTC) and Transaction FAQ

Configuring MS DTC Services

与此 SO 问题相关:HRESULT: 0x8004D00E using TransactionScope - C#

【讨论】:

  • 感谢 Mitch Wheat,将防火墙设置为关闭后。这是作品。非常感谢
  • @Sarathis1904 如果 Mitch 的回答解决了问题,请务必将其标记为答案并投票。
  • @Sarathis1904:将防火墙设置为关闭已验证,但请不要将其关闭!请参阅上面的链接:为 MS DTC 启用防火墙例外
猜你喜欢
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 2017-11-04
  • 2022-12-18
  • 1970-01-01
相关资源
最近更新 更多