Saya menggunakan SQL Server dan ASP.NET. Saya memiliki fungsi berikut:
Using js = daoFactory.CreateJoinScope()
Using tran = New Transactions.TransactionScope()
'...
tran.Complete()
End Using
End Using
Namun, pengecualian ' Manajer transaksi telah menonaktifkan dukungannya untuk transaksi jarak jauh / jaringan. 'dilempar.
Deskripsi JoinScope:
Public Class JoinScope
Implements IJoinScope
Implements IDisposable
'...
End Class
Saya telah bekerja dengan cara ini di aplikasi lain dengan lingkungan yang sama tanpa masalah, tetapi di sini saya memiliki masalah ini. Apa yang dapat saya lakukan untuk memperbaiki masalah tersebut?
asp.net
vb.net
transactionscope
Lajos Arpad
sumber
sumber
Jawaban:
Pastikan bahwa Layanan "Koordinator Transaksi Terdistribusi" berjalan di database dan klien. Pastikan juga Anda mencentang "Akses DTC Jaringan", "Izinkan Klien Jarak Jauh", "Izinkan Masuk / Keluar", dan "Aktifkan KIAT".
Untuk mengaktifkan Akses DTC Jaringan untuk transaksi MS DTC
Buka snap-in Layanan Komponen.
Untuk membuka Layanan Komponen, klik Mulai. Di kotak pencarian, ketik dcomcnfg, lalu tekan ENTER.
Perluas pohon konsol untuk menemukan DTC (misalnya, DTC Lokal) yang ingin Anda aktifkan Akses MS DTC Jaringan.
Pada menu Action, klik Properties.
Klik tab Keamanan dan lakukan perubahan berikut: Di Pengaturan Keamanan, pilih kotak centang Akses DTC Jaringan.
Di Komunikasi Manajer Transaksi, pilih kotak centang Izinkan Masuk dan Izinkan Keluar.
sumber
Saya mengalami masalah ini sesekali, saya telah mengikuti instruksi di sini dan yang sangat mirip di tempat lain. Semua telah dikonfigurasi dengan benar.
Halaman ini: http://sysadminwebsite.wordpress.com/2012/05/29/9/ membantu saya menemukan masalah.
Pada dasarnya saya memiliki CID duplikat untuk MSDTC di kedua server. HKEY_CLASSES_ROOT \ CID
Lihat: http://msdn.microsoft.com/en-us/library/aa561924.aspx bagian Pastikan bahwa MSDTC diberi nilai CID yang unik
Saya bekerja dengan server virtual dan tim server kami suka menggunakan gambar yang sama untuk setiap server. Ini perbaikan sederhana dan kami tidak perlu memulai ulang. Tetapi layanan DTC memang membutuhkan pengaturan ke Startup otomatis dan perlu dimulai setelah menginstal ulang.
sumber
Saya memiliki prosedur penyimpanan yang memanggil Prosedur penyimpanan lain di "server tertaut". Ketika saya menjalankannya dalam ssms tidak apa-apa, tetapi ketika saya memanggilnya dalam aplikasi (Dengan Kerangka Kerja Entitas), saya mendapat kesalahan ini. Artikel ini membantu saya dan saya menggunakan skrip ini:
EXEC sp_serveroption @server = 'LinkedServer IP or Name',@optname = 'remote proc transaction promotion', @optvalue = 'false' ;
untuk lebih detailnya lihat ini: Server yang ditautkan: Manajer transaksi mitra telah menonaktifkan dukungannya untuk transaksi jarak jauh / jaringan
sumber
Dalam skenario saya, pengecualian dilemparkan karena saya mencoba membuat instance koneksi baru dalam TransactionScope pada koneksi yang sudah ada:
Contoh:
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. } }
sumber
Komentar dari jawaban : "pastikan Anda menggunakan koneksi terbuka yang sama untuk semua panggilan database di dalam transaksi. - Magnus"
Pengguna kami disimpan dalam db terpisah dari data yang saya gunakan dalam transaksi. Membuka koneksi db untuk mendapatkan pengguna menyebabkan kesalahan ini bagi saya. Memindahkan koneksi db lain dan pencarian pengguna di luar cakupan transaksi memperbaiki kesalahan.
sumber
Saya memposting solusi di bawah ini di sini karena setelah beberapa pencarian di sinilah saya mendarat, jadi yang lain mungkin juga. Saya mencoba menggunakan EF 6 untuk memanggil prosedur tersimpan, tetapi mengalami kesalahan serupa karena prosedur tersimpan memiliki server yang ditautkan sedang digunakan.
Operasi tidak dapat dilakukan karena penyedia OLE DB _ untuk server tertaut _ tidak dapat memulai transaksi terdistribusi
Manajer transaksi mitra telah menonaktifkan dukungannya untuk transaksi jarak jauh / jaringan *
Beralih ke SQL Client memang memperbaiki masalah saya, yang juga mengonfirmasi bagi saya bahwa itu adalah masalah EF.
Model EF menghasilkan upaya berbasis metode:
Upaya berbasis ExecuteSqlCommand:
db.Database.ExecuteSqlCommand("exec [SomeDB].[dbo].[SomeStoredProcedure]");
Dengan:
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();
Kode itu dapat dipersingkat, tetapi menurut saya versi itu sedikit lebih nyaman untuk debugging dan melangkah melalui.
Saya tidak percaya bahwa Klien Sql selalu merupakan pilihan yang disukai, tetapi saya merasa ini setidaknya layak dibagikan jika ada orang lain yang memiliki masalah serupa yang dibawa ke sini oleh google.
Kode di atas adalah C #, tetapi konsep mencoba untuk beralih ke Klien Sql masih berlaku. Setidaknya itu akan mendiagnosis untuk mencoba melakukannya.
sumber
Saya mengalami masalah ini dengan server tertaut di SSMS saat mencoba membuat prosedur tersimpan.
Di server tertaut, saya mengubah opsi server "Aktifkan Promosi pada Transaksi Terdistribusi" menjadi False.
Tangkapan layar Opsi Server
sumber
Jika Anda tidak dapat menemukan DTC Lokal di layanan komponen, coba jalankan skrip PowerShell ini terlebih dahulu:
$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
Dan itu muncul!
Sumber: Manajer transaksi mitra telah menonaktifkan dukungannya untuk transaksi jarak jauh / jaringan
sumber
Jika orang lain memiliki masalah yang sama:
Saya mengalami kesalahan serupa. ternyata saya membungkus beberapa pernyataan SQL dalam sebuah transaksi, di mana salah satunya dieksekusi pada server yang ditautkan (pernyataan Gabung dalam pernyataan EXEC (...) AT Server). Saya menyelesaikan masalah dengan membuka koneksi terpisah ke server yang ditautkan, merangkum pernyataan itu dalam percobaan ... tangkap lalu batalkan transaksi pada koneksi asli jika tangkapannya tersandung.
sumber
Saya mendapat pesan kesalahan yang sama. Bagi saya mengubah
pooling=False
ke;pooling=true;Max Pool Size=200
dalam string koneksi memperbaiki masalah.sumber