Доступ к сети отключен в MSDTC

Я использую System.Transactions.TransactionScope() в модульном тесте, чтобы вставить запись, попытаться прочитать ее и разрешить откат области транзакции, чтобы не оставлять следов в базе данных.

1  var rep = new RunRepository();
2  using (var scop = new TransactionScope())
3  {
4     var runId = rep.SaveSwrsRun([Run data elements]); // returns PK RunId
5     var run = rep.FetchSwrsRun(runId);  // returns an object of type Run
6     Assert.IsNotNull(run);
7  }

Строка 5 выдает исключение с сообщением об ошибке

System.Transactions.TransactionManagerCommunicationException: доступ к сети для диспетчера распределенных транзакций (MSDTC) отключен. Включите DTC для доступа к сети в конфигурации безопасности для MSDTC с помощью инструмента администрирования служб компонентов.

Я проверил инструмент администрирования служб компонентов, и на моей рабочей станции есть включен DTC. Я также обнаружил этот поток MSDTC Transaction scope, который направляет меня на Как включить доступ к сети DTC

Но когда я проверил SQL-сервер, флажок удаленного доступа уже был установлен. У кого-нибудь еще есть другие идеи?

Подробнее ... Когда я заставляю Репозиторий удерживать одно и то же соединение и не возвращаться в пул для другого для второго оператора Sql, он работает. По-видимому, использование другого соединения для второго состояния sql запускает DTC для эскалации транзакции в «распределенный режим» (чего не должно быть, поскольку оба оператора sql находятся на одном сервере и используют одну и ту же строку подключения), а не упомянуть, что даже если это так, этот (распределенный режим) все равно должен работать.


person Charles Bretana    schedule 14.12.2010    source источник
comment
Помимо включения доступа к сети DTC, настроены остальные параметры (на обоих серверах) согласно разделу Как включить доступ к сети DTC? например Разрешить входящий, исходящий и т. Д.   -  person Randy supports Monica    schedule 14.12.2010
comment
да, установлены флажки как для входящих, так и для исходящих ... Все в порядке ...   -  person Charles Bretana    schedule 15.12.2010
comment
Вы используете SQL Server 2005 или выше? Если так, то, как вы говорите, эскалации транзакций не должно быть. Возможно ли, что репозиторий не закрывает соединение после сохранения?   -  person Randy supports Monica    schedule 15.12.2010
comment
Для проблем с DTC я бы попробовал DTCPing (download.microsoft.com/download/d/0/0/), чтобы узнать, может ли он предоставить дополнительную информацию. Я не уверен, поможет ли это, поскольку обычно это наиболее полезно, когда сообщения более загадочные. См. blogs.msdn.com/b/distributedservices/archive/2008/11/12/ за приятную прогулку.   -  person Randy supports Monica    schedule 15.12.2010
comment
Используя sql 2008, и, как отмечалось выше, если я использую то же соединение, проблема исчезнет, ​​поэтому кажется, что происходит то, что, хотя строки соединений идентичны, если вы запускаете два запроса в разных соединениях, транзакция автоматически увеличивается, (Я не думаю, что это должно произойти!) Вторая проблема заключается в том, почему вычисленная транзакция не работает (проблема с подключением к сети MSDTC где-то ...)   -  person Charles Bretana    schedule 16.12.2010
comment
Ты прав! Если вы используете SQL Server 2008, вы не должны видеть эскалацию транзакций, если у вас одновременно открыто только одно соединение. blogs.msdn.com/b/florinlazar/archive/ 2008/05/02 / 8452486.aspx Поскольку он нарастает: дважды проверьте, что 2 соединения не открыты одновременно, убедитесь, что пул соединений включен, убедитесь, что SQL Server 2008 не работает в 2005 режим совместимости. Вы используете .NET 3.5? Я думаю, что новая логика эскалации доступна только в версии 3.5 (VS2008).   -  person Randy supports Monica    schedule 16.12.2010


Ответы (1)


Если ваша служба DTC была запущена, щелкните «Конфигурация безопасности» и установите флажок «Доступ к сети DTC» в области настроек безопасности. См. Изображение ниже. Доступ к сети DTC

person Habibillah    schedule 02.08.2012