24

错误:

分布式事务管理器 (MSDTC) 的网络访问已被禁用。请使用组件服务管理工具在 MSDTC 的安全配置中启用 DTC 以进行网络访问。

using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope())   
11                 {   
12                     try  
13                     {   
14                         foreach (DataRow row in this.dt1.Rows)   
15                         {   
16                             int titleId = int.Parse(row["titleId"].ToString());   
17                             string fname = row["fname"].ToString();   
18                             string lname = row["lname"].ToString();   
19   
20                             if (cmd.Parameters.Count > 0)   
21                                 cmd.Parameters.Clear();   
22   
23                             cmd.Parameters.AddWithValue("@titleId", titleId);   
24                             cmd.Parameters.AddWithValue("@fname", fname);   
25                             cmd.Parameters.AddWithValue("@lname", lname);   
26                             cmd.ExecuteNonQuery();   
27   
28                         }   
29                         con.Close();   
30                         ts.Complete();   
31                     }   
32                     catch (Exception ex)   
33                     {   
34   
35                     }                       
36                 }   
37             }  
4

5 回答 5

60

要在Windows Vista/7/8 Server 2008R2/2012上启用对MSDTC的网络访问,请按照以下步骤操作:

  1. 单击开始,单击运行,键入dcomcnfg,然后单击确定以打开组件服务

  2. 在控制台树中,单击展开Component Services,单击展开Computers,单击展开My Computer,单击展开Distributed Transaction Coordinator,然后单击Local DTC

  3. 右键单击本地 DTC,然后单击属性以显示本地 DTC 属性对话框。

  4. 单击安全选项卡。

  5. 选中“网络 DTC 访问”复选框。

  6. 最后选中“允许入站”“允许出站”复选框。

  7. 单击应用确定

  8. 将弹出一条有关重新启动服务的消息。

  9. 单击确定,仅此而已。

于 2015-02-20T19:21:04.617 回答
3

在事务范围 Complete 方法之后关闭连接。

ts.Complete();
con.Close();   

完成的代码是

using (System.Transactions.TransactionScope ts = new  Sytem.Transactions.TransactionScope())   
{   
    try  
    {   
        foreach (DataRow row in this.dt1.Rows)   
        {   
            int titleId = int.Parse(row["titleId"].ToString());   
            string fname = row["fname"].ToString();   
            string lname = row["lname"].ToString();   

            if (cmd.Parameters.Count > 0)   
                cmd.Parameters.Clear();   

            cmd.Parameters.AddWithValue("@titleId", titleId);   
            cmd.Parameters.AddWithValue("@fname", fname);   
            cmd.Parameters.AddWithValue("@lname", lname);   
            cmd.ExecuteNonQuery();   
        }   
        ts.Complete(); 
        con.Close();     
    }   
    catch (Exception ex)   
    {   
    }                       
}    
于 2013-06-12T05:25:35.357 回答
0

Enlist=false;在连接字符串的末尾添加对我有帮助!

于 2021-12-03T23:50:15.687 回答
0

如果有人正在查看此内容并使用 linq,则只需将整个事务包装到 JoinScope 中,如下所示:

using js = new JoinScope(false) {
    using (System.Transactions.TransactionScope ts = new Sytem.Transactions.TransactionScope()) { 
        ... 
    }
}
于 2021-10-05T16:26:43.223 回答
-1

InnerException = {“分布式事务管理器 (MSDTC) 的网络访问已被禁用。请使用组件服务管理工具在 MSDTC 的安全配置中启用 DTC 进行网络访问。”}

我按照以下步骤在本地系统上解决了上述问题

启用网络 DTC 访问:

  1. 在 start 中运行 dcomcnfg 以打开组件服务管理工具

  2. 单击本地 DTC 并打开属性窗口

  3. 单击安全选项卡并进行以下安全设置以启用网络 DTC 访问

    启用与分布式事务协调器相关的防火墙规则 (TCP-IN/TPC-

更多详情@https ://rajeevdotnet.blogspot.com/2018/10/wcf-exception-network-access-for.html

于 2018-10-05T02:30:10.467 回答