已禁用分布式事务管理器(MSDTC)的网络访问

Nic*_*ahn 12 asp.net system.transactions

错误:

已禁用分布式事务管理器(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             }  
Run Code Online (Sandbox Code Playgroud)

Sun*_*eep 39

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

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

  2. 在控制台树中,单击以展开" 组件服务",单击以展开" 计算机",单击以展开" 我的电脑",单击以展开" 分布式事务处理协调器",然后单击" 本地DTC".

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

  4. 单击" 安全"选项卡.

  5. 选中"网络DTC访问"复选框.

  6. 最后选中"允许入站""允许出站"复选框.

  7. 单击应用,确定.

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

  9. 单击" 确定",这就是全部.

  • 这有什么安全风险?我宁愿不要在没有完全理解其含义的情况下盲目地开放网络访问。 (4认同)

小智 3

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

ts.Complete();
con.Close();   
Run Code Online (Sandbox Code Playgroud)

完成的代码是

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)   
    {   
    }                       
}    
Run Code Online (Sandbox Code Playgroud)