Bagikan melalui


Transaksi terdistribusi

Berlaku untuk: .NET Framework .NET .NET Standard

Mengunduh ADO.NET

Transaksi adalah sekumpulan tugas terkait yang berhasil (menerapkan) atau pun yang gagal (membatalkan) sebagai unit, di antara yang lain. Sebuah transaksi terdistribusi adalah transaksi yang memengaruhi beberapa sumber daya. Agar transaksi terdistribusi untuk melakukan penerapan, semua peserta harus menjamin bahwa setiap perubahan pada data akan menjadi permanen. Perubahan harus tetap ada meskipun terjadi crash pada sistem atau terjadi peristiwa tak terduga lainnya. Bahkan jika satu peserta gagal membuat jaminan ini, maka seluruh transaksi gagal, dan setiap perubahan pada data dalam cakupan transaksi akan digulung balik.

Catatan

Untuk informasi tentang transaksi terdistribusi di Azure SQL Database dan Azure SQL Managed Instance, lihat Transaksi terdistribusi di seluruh database cloud.

Bekerja dengan System.Transactions

Di .NET, transaksi terdistribusi dikelola melalui API di System.Transactions namespace layanan. API System.Transactions akan mengirimkan penanganan transaksi terdistribusi ke monitor transaksi seperti Koordinator Transaksi Terdistribusi Microsoft (MS DTC) ketika beberapa manajer sumber daya persisten terlibat. Untuk informasi selengkapnya, lihat Dasar-Dasar Transaksi.

ADO.NET 2.0 memperkenalkan dukungan untuk mendaftar dalam transaksi terdistribusi menggunakan metode EnlistTransaction, yang mendaftarkan koneksi dalam Transaction instans. Dalam versi ADO.NET sebelumnya, pendaftaran eksplisit dalam transaksi terdistribusi dilakukan menggunakan metode koneksi EnlistDistributedTransaction untuk mendaftarkan koneksi dalam instans ITransaction, yang didukung untuk kompatibilitas mundur. Untuk informasi selengkapnya tentang transaksi Layanan Enterprise, lihat Interoperabilitas dengan Layanan Perusahaan dan Transaksi COM+.

Saat menggunakan System.Transactions transaksi dengan Penyedia Data Microsoft SqlClient untuk SQL Server terhadap database SQL Server, ringan Transaction akan secara otomatis digunakan. Transaksi kemudian dapat dipromosikan ke transaksi terdistribusi penuh sesuai kebutuhan. Untuk informasi selengkapnya, lihat Integrasi System.Transactions dengan SQL Server.

Mendaftarkan secara otomatis dalam transaksi terdistribusi

Pendaftaran otomatis adalah cara default (dan pilihan) untuk mengintegrasikan koneksi ADO.NET dengan System.Transactions. Objek koneksi akan secara otomatis mendaftar dalam transaksi terdistribusi yang ada jika menentukan bahwa transaksi aktif, yang, dalam hal System.Transaction, berarti Transaction.Current tidak null. Pendaftaran transaksi otomatis terjadi ketika koneksi dibuka. Pendaftaran ini tidak akan terjadi setelah itu bahkan jika perintah dijalankan di dalam cakupan transaksi. Anda dapat menonaktifkan pendaftaran otomatis dalam transaksi yang ada dengan menentukan Enlist=false sebagai parameter string koneksi untuk SqlConnection.ConnectionString.

Mendaftar secara manual dalam transaksi terdistribusi

Jika pendaftaran otomatis dinonaktifkan atau Anda perlu mendaftarkan transaksi yang dimulai setelah koneksi dibuka, Anda dapat mendaftarkan transaksi terdistribusi yang ada menggunakan EnlistTransaction metode SqlConnection objek untuk Penyedia Data Microsoft SqlClient untuk SQL Server. Mendaftar dalam transaksi terdistribusi yang ada memastikan bahwa, jika transaksi diterapkan atau digulung balik, modifikasi yang dibuat oleh kode pada sumber data juga akan dilakukan atau digulung balik.

Catatan

Pengecualian akan diterapkan jika Anda mencoba menerapkan atau menggulung balik transaksi jika DataReader dimulai saat transaksi aktif.

Mendaftar dalam transaksi terdistribusi sangat berlaku saat mengumpulkan objek bisnis. Jika objek bisnis dikumpulkan dengan koneksi terbuka, pendaftaran transaksi otomatis hanya terjadi saat koneksi tersebut dibuka. Jika beberapa transaksi dilakukan menggunakan objek bisnis yang dikumpulkan, koneksi terbuka untuk objek tersebut tidak akan secara otomatis mendaftar dalam transaksi yang baru dimulai. Dalam hal ini, Anda dapat menonaktifkan pendaftaran transaksi otomatis untuk koneksi dan mendaftarkan koneksi dalam transaksi menggunakan EnlistTransaction.

EnlistTransaction mengambil satu argumen jenis Transaction yang merupakan referensi ke transaksi yang ada. Setelah memanggil metode koneksi EnlistTransaction, semua modifikasi yang dilakukan pada sumber data menggunakan koneksi yang disertakan dalam transaksi. Meneruskan nilai null membatalkan daftar koneksi dari pendaftaran transaksi terdistribusi saat ini. Perhatikan bahwa koneksi harus dibuka sebelum memanggil EnlistTransaction.

Catatan

Setelah koneksi secara eksplisit terdaftar pada transaksi, koneksi tidak dapat membatalkan daftar atau terdaftar dalam transaksi lain sampai transaksi pertama selesai.

Perhatian

EnlistTransaction melempar pengecualian jika koneksi telah memulai transaksi menggunakan metode koneksi BeginTransaction. Namun, jika transaksi adalah transaksi lokal yang dimulai di sumber data (misalnya, menjalankan pernyataan BEGIN TRANSACTION secara eksplisit menggunakan SqlCommand), EnlistTransaction akan mengembalikan transaksi lokal dan mendaftarkan dalam transaksi terdistribusi yang ada seperti yang diminta. Anda tidak akan menerima pemberitahuan bahwa transaksi lokal digulung balik, dan harus mengelola transaksi lokal apa pun yang tidak mulai menggunakan BeginTransaction. Jika Anda menggunakan Penyedia Data Microsoft SqlClient untuk SQL Server dengan SQL Server, upaya untuk mendaftar akan melemparkan pengecualian. Semua kasus lain tidak akan terdeteksi.

Transaksi promotable di SQL Server

SQL Server mendukung transaksi yang dapat dipromosikan di mana transaksi ringan lokal dapat secara otomatis dipromosikan ke transaksi terdistribusi hanya jika diperlukan. Transaksi yang dapat diproyeksikan tidak memanggil overhead tambahan dari transaksi terdistribusi kecuali overhead yang ditambahkan diperlukan. Untuk informasi selengkapnya dan sampel kode, lihat Integrasi System.Transactions dengan SQL Server.

Mengonfigurasi Transaksi Terdistribusi

Anda mungkin perlu mengaktifkan MS DTC melalui jaringan untuk menggunakan transaksi terdistribusi. Jika Windows Firewall lokal server diaktifkan, Anda harus mengizinkan layanan MS DTC untuk menggunakan jaringan atau membuka port MS DTC.

Lihat juga