web-dev-qa-db-ja.com

分散トランザクションマネージャー(MSDTC)のネットワークアクセスが無効になっています

エラー:

分散トランザクションマネージャー(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             }  
15
Nick Kahn

Windows Vista/7/8 Server 2008R2/2012[〜#〜] msdtc [〜#〜]へのネットワークアクセスを有効にするには、次の手順に従います。

  1. クリック開始、クリック実行、タイプdcomcnfg、次にクリック[〜#〜] ok [〜#〜]開くコンポーネントサービス

  2. コンソールツリーで、クリックして展開コンポーネントサービス、クリックして展開コンピューター、クリックして展開マイコンピューター、クリックして展開Distributed Transaction Coordinator次に、ローカルDTCをクリックします。

  3. ローカルDTCを右クリックし、プロパティをクリックして、ローカルDTCプロパティダイアログボックスを表示します。

  4. セキュリティタブをクリックします。

  5. チェックマーク"ネットワークDTCアクセス"チェックボックス。

  6. 最後に、チェックボックス"インバウンドを許可"および"アウトバウンドを許可"チェックボックスをオンにします。

  7. 適用[〜#〜] ok [〜#〜]をクリックします。

  8. 再起動サービスに関するメッセージがポップアップ表示されます。

  9. [〜#〜] ok [〜#〜]をクリックすると、それだけです。

38
Sundeep

トランザクションスコープの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)   
    {   
    }                       
}