Я использую SQL Server и ASP.NET. У меня есть такая функция:
Using js = daoFactory.CreateJoinScope()
Using tran = New Transactions.TransactionScope()
'...
tran.Complete()
End Using
End Using
Однако исключение: «Диспетчер транзакций отключил поддержку удаленных / сетевых транзакций. 'брошено.
Описание JoinScope:
Public Class JoinScope
Implements IJoinScope
Implements IDisposable
'...
End Class
Я работал таким образом в другом приложении с той же средой без проблем, но здесь у меня есть эта проблема. Что я мог сделать, чтобы исправить проблему?
asp.net
vb.net
transactionscope
Лайош Арпад
источник
источник
Ответы:
Убедитесь, что служба «Координатор распределенных транзакций» работает как в базе данных, так и на клиенте. Также убедитесь, что вы отметили «Доступ к сети DTC», «Разрешить удаленный клиент», «Разрешить входящий / исходящий» и «Включить TIP».
Включение доступа к сети DTC для транзакций MS DTC
Откройте оснастку «Службы компонентов».
Чтобы открыть Службы компонентов, нажмите Пуск. В поле поиска введите dcomcnfg и нажмите клавишу ВВОД.
Разверните дерево консоли, чтобы найти DTC (например, Local DTC), для которого вы хотите включить сетевой доступ к MS DTC.
В меню «Действие» выберите «Свойства».
Перейдите на вкладку «Безопасность» и внесите следующие изменения: В «Параметры безопасности» установите флажок «Доступ к сети DTC».
В Transaction Manager Communication установите флажки Allow Inbound и Allow Outbound.
источник
У меня периодически возникала эта проблема, я следовал инструкциям здесь и очень похожим инструкциям в других местах. Все было настроено правильно.
Эта страница: http://sysadminwebsite.wordpress.com/2012/05/29/9/ помогла мне найти проблему.
В основном у меня были дублированные CID для MSDTC на обоих серверах. HKEY_CLASSES_ROOT \ CID
См .: http://msdn.microsoft.com/en-us/library/aa561924.aspx раздел Убедитесь, что MSDTC присвоено уникальное значение CID
Я работаю с виртуальными серверами, и наша серверная команда любит использовать один и тот же образ для каждого сервера. Это простое решение, и нам не потребовался перезапуск. Но для службы DTC действительно нужно было установить автоматический запуск и запускать ее после переустановки.
источник
У меня была процедура хранилища, которая вызывает другую процедуру хранилища на «связанном сервере». Когда я выполняю ее в ssms, все в порядке, но когда я вызываю ее в приложении (By Entity Framework), я получил эту ошибку. Эта статья мне помогла, и я использовал этот скрипт:
EXEC sp_serveroption @server = 'LinkedServer IP or Name',@optname = 'remote proc transaction promotion', @optvalue = 'false' ;
для более подробной информации посмотрите на это: Связанный сервер: менеджер транзакций партнера отключил поддержку удаленных / сетевых транзакций.
источник
В моем сценарии исключение было выброшено, потому что я пытался создать новый экземпляр соединения в TransactionScope для уже существующего соединения:
Пример:
void someFunction() { using (var db = new DBContext(GetConnectionString())) { using (var transaction = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted })) { someOtherFunction(); // This function opens a new connection within this transaction, causing the exception. } } } void someOtherFunction() { using (var db = new DBContext(GetConnectionString())) { db.Whatever // <- Exception. } }
источник
Комментарий к ответу : «убедитесь, что вы используете одно и то же открытое соединение для всех вызовов базы данных внутри транзакции. - Магнус»
Наши пользователи хранятся в отдельной базе данных от данных, с которыми я работал в транзакциях. Открытие соединения db для получения пользователя вызывало эту ошибку для меня. Перемещение другого соединения с базой данных и поиска пользователя за пределы области транзакции исправило ошибку.
источник
Я публикую решение ниже, потому что после некоторых поисков я приземлился именно здесь, поэтому другие могут тоже. Я пытался использовать EF 6 для вызова хранимой процедуры, но имел аналогичную ошибку, потому что хранимая процедура использовала связанный сервер .
Операция не может быть выполнена, потому что поставщик OLE DB _ для связанного сервера _ не смог начать распределенную транзакцию
Менеджер партнерских транзакций отключил поддержку удаленных / сетевых транзакций *
Переход к SQL Client устранил мою проблему, что также подтвердило для меня, что это была проблема EF.
Попытка на основе метода, созданного моделью EF:
Попытка на основе ExecuteSqlCommand:
db.Database.ExecuteSqlCommand("exec [SomeDB].[dbo].[SomeStoredProcedure]");
С участием:
var connectionString = db.Database.Connection.ConnectionString; var connection = new System.Data.SqlClient.SqlConnection(connectionString); var cmd = connection.CreateCommand(); cmd.CommandText = "exec [SomeDB].[dbo].[SomeStoredProcedure]"; connection.Open(); var result = cmd.ExecuteNonQuery();
Этот код можно сократить, но я думаю, что эта версия немного удобнее для отладки и пошагового выполнения.
Я не верю, что клиент Sql обязательно является предпочтительным выбором, но я чувствовал, что этим, по крайней мере, стоит поделиться, если кто-то еще, имеющий аналогичные проблемы, попадет сюда через Google.
Вышеупомянутый код написан на C #, но концепция попытки переключения на Sql Client по-прежнему применяется. По крайней мере, попытка сделать это будет диагностической.
источник
Если вы не смогли найти Local DTC в службах компонентов, попробуйте сначала запустить этот сценарий PowerShell:
$DTCSettings = @( "NetworkDtcAccess", # Network DTC Access "NetworkDtcAccessClients", # Allow Remote Clients ( Client and Administration) "NetworkDtcAccessAdmin", # Allow Remote Administration ( Client and Administration) "NetworkDtcAccessTransactions", # (Transaction Manager Communication ) "NetworkDtcAccessInbound", # Allow Inbound (Transaction Manager Communication ) "NetworkDtcAccessOutbound" , # Allow Outbound (Transaction Manager Communication ) "XaTransactions", # Enable XA Transactions "LuTransactions" # Enable SNA LU 6.2 Transactions ) foreach($setting in $DTCSettings) { Set-ItemProperty -Path HKLM:\Software\Microsoft\MSDTC\Security -Name $setting -Value 1 } Restart-Service msdtc
И оказывается!
Источник: менеджер транзакций партнеров отключил поддержку удаленных / сетевых транзакций.
источник
Если у других такая же проблема:
У меня была аналогичная ошибка. Оказалось, что я обертывал несколько операторов SQL в транзакции, где один из них выполнялся на связанном сервере (оператор слияния в операторе EXEC (...) AT Server). Я решил проблему, открыв отдельное соединение со связанным сервером, инкапсулируя этот оператор в try ... catch, а затем прервав транзакцию в исходном соединении в случае срабатывания catch.
источник
У меня было такое же сообщение об ошибке. Для меня изменение
pooling=False
на;pooling=true;Max Pool Size=200
в строке подключения устранило проблему.источник
У меня возникла эта проблема со связанным сервером в SSMS при попытке создать хранимую процедуру.
На связанном сервере я изменил параметр сервера «Включить продвижение при распределенной транзакции» на False.
Снимок экрана с параметрами сервера
источник