Доступ к сети для диспетчера распределенных транзакций (MSDTC) отключен
Ошибка:
Доступ к сети для диспетчера распределенных транзакций (MSDTC) отключен. Включите DTC для доступа к сети в конфигурации безопасности для MSDTC с помощью инструмента администрирования служб компонентов.
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 }
5 ответов
Чтобы включить сетевой доступ к MSDTC в Windows Vista / 7/8 Server 2008R2 / 2012, выполните следующие действия:
Нажмите кнопку Пуск, выберите пункт Выполнить, введите dcomcnfg, а затем нажмите кнопку ОК, чтобы открыть службы компонентов.
В дереве консоли щелкните, чтобы развернуть Службы компонентов, щелкните, чтобы развернуть Компьютеры, щелкните, чтобы развернуть Мой компьютер, щелкните, чтобы развернуть Координатор распределенных транзакций, а затем щелкните Локальный код неисправности.
Щелкните правой кнопкой мыши Local DTC и выберите Properties, чтобы открыть диалоговое окно Local DTC Properties.
Перейдите на вкладку " Безопасность ".
Флажок "Сетевой доступ к DTC".
Наконец отметьте флажки "Разрешить входящий" и "Разрешить исходящий".
Нажмите Применить, ОК.
Появится сообщение о перезапуске сервиса.
Нажмите ОК и все.
Закройте соединение после завершения транзакции. Метод 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)
{
}
}
Добавление
Enlist=false;
в конце строки подключения мне помогло!
Если кто-то смотрит на это и использует linq, просто оберните всю транзакцию в JoinScope следующим образом:
using js = new JoinScope(false) {
using (System.Transactions.TransactionScope ts = new Sytem.Transactions.TransactionScope()) {
...
}
}
InnerException = {"Доступ к сети для диспетчера распределенных транзакций (MSDTC) отключен. Включите DTC для доступа к сети в конфигурации безопасности для MSDTC с помощью инструмента администрирования служб компонентов."}
Я выполнил описанные ниже шаги, чтобы решить вышеуказанную проблему в моей локальной системе.
Включить сетевой доступ по DTC:
Запустите dcomcnfg при запуске, чтобы открыть инструмент администрирования служб компонентов.
Нажмите на Local DTC и откройте окно свойств
Нажмите на вкладку "Безопасность" и сделайте следующие настройки безопасности, чтобы включить доступ по сети DTC.
Включенные правила брандмауэра, связанные с координатором распределенных транзакций (TCP-IN/TPC-
Для получения дополнительной информации @ https://rajeevdotnet.blogspot.com/2018/10/wcf-exception-network-access-for.html