Bagikan melalui


Interoperabilitas dengan Layanan Enterprise dan Transaksi COM+

Namespace layanan System.Transactions mendukung interoperabilitas antara objek transaksi yang dibuat menggunakan namespace layanan ini dan transaksi yang dibuat melalui COM+.

Anda dapat menggunakan enumerasi EnterpriseServicesInteropOption saat membuat instans TransactionScope baru untuk menentukan tingkat interoperabilitas dengan COM+.

Secara default, ketika kode aplikasi Anda memeriksa properti Current statis, System.Transactions mencoba mencari transaksi terkini, atau objek TransactionScope yang menyatakan bahwa Current adalah null. Jika tidak dapat menemukan salah satunya, System.Transactions mengkueri konteks COM+ untuk transaksi. Perhatikan bahwa meskipun System.Transactions dapat menemukan transaksi dari konteks COM+, ini tetap memilih transaksi yang native untuk System.Transactions.

Tingkat interoperabilitas

Enumerasi EnterpriseServicesInteropOption menentukan tingkat interoperabilitas berikut—None, Full, dan Automatic.

Kelas TransactionScope menyediakan konstruktor yang menerima EnterpriseServicesInteropOption sebagai parameter.

None, seperti namanya, menyiratkan bahwa tidak ada interoperabilitas antara konteks System.EnterpriseServices dan cakupan transaksi. Setelah membuat objek TransactionScope dengan None, perubahan apa pun pada Current tidak tercermin dalam konteks COM+. Demikian pula, perubahan transaksi dalam konteks COM+ tidak tercermin dalam Current. Ini adalah mode operasi tercepat untuk System.Transactions karena tidak diperlukan sinkronisasi tambahan. None adalah nilai default yang digunakan oleh TransactionScope dengan semua konstruktor yang tidak menerima EnterpriseServicesInteropOption sebagai parameter.

Jika Anda ingin menggabungkan transaksi System.EnterpriseServices dengan transaksi ambient, Anda harus menggunakan Full atau Automatic. Kedua nilai ini bergantung pada fitur yang disebut layanan tanpa komponen, dan oleh karena itu Anda harus menjalankan Windows XP Paket Layanan 2 atau Windows Server 2003 saat menggunakannya.

Full menetapkan bahwa transaksi ambient untuk System.Transactions dan System.EnterpriseServices selalu sama. Ini menghasilkan pembuatan konteks transaksional System.EnterpriseServices baru dan menerapkan transaksi terkini agar TransactionScope menjadi terkini untuk konteks tersebut. Dengan demikian, transaksi di Current sepenuhnya sinkron dengan transaksi di Transaction. Nilai ini memperkenalkan penalti performa karena konteks COM+ baru mungkin perlu dibuat.

Automatic menetapkan persyaratan berikut:

  • Saat Current diperiksa, System.Transactions harus mendukung transaksi dalam konteks COM+ jika mendeteksi bahwa transaksi berjalan dalam konteks selain konteks default. Perhatikan bahwa konteks default tidak dapat berisi transaksi. Oleh karena itu, dalam konteks default, bahkan dengan Automatic, transaksi yang disimpan di TLS yang digunakan oleh System.Transactions dikembalikan untuk Current.

  • Jika objek TransactionScope baru dibuat dan pembuatan terjadi dalam konteks selain konteks default, transaksi terkini untuk objek TransactionScope harus tercermin dalam COM+. Dalam kasus ini, Automatic berperilaku seperti Full yang membuat konteks COM+ baru.

Selain itu jika Current diatur di Full dan Automatic, kedua mode ini menyiratkan bahwa Current tidak dapat diatur secara langsung. Setiap upaya untuk mengatur Current secara langsung selain membuat TransactionScope menghasilkan InvalidOperationException. Nilai enumerasi EnterpriseServicesInteropOption diwarisi oleh cakupan transaksi baru yang tidak secara eksplisit menentukan nilai mana yang akan digunakan. Misalnya, jika Anda membuat objek TransactionScope baru dengan Full, lalu membuat objek TransactionScope kedua tetapi tidak menentukan nilai EnterpriseServicesInteropOption, objek TransactionScope kedua juga memiliki Full.

Singkatnya, aturan berikut berlaku saat membuat cakupan transaksi baru:

  1. Current diperiksa untuk melihat apakah ada transaksi. Pemeriksaan ini menghasilkan:

  2. Nilai enumerasi TransactionScopeOption yang diteruskan oleh konstruktor TransactionScope diperiksa. Ini menentukan apakah transaksi baru harus dibuat.

  3. Jika transaksi baru akan dibuat, nilai EnterpriseServicesInteropOption berikut akan menghasilkan:

    • Full: transaksi yang terkait dengan konteks COM+ dibuat.

    • None: transaksi System.Transactions dibuat.

    • Automatic: jika ada konteks COM+, transaksi dibuat dan dilampirkan ke konteks.

Tabel berikut mengilustrasikan konteks Layanan Enterprise (ES) dan cakupan transaksional yang mengharuskan agar transaksi menggunakan enumerasi EnterpriseServicesInteropOption.

Konteks ES Tidak Otomatis Penuh
Konteks default Konteks default Konteks default Buat baru
konteks transaksional
Konteks non-default Mempertahankan konteks klien Membuat konteks transaksional baru Membuat konteks transaksional baru

Tabel berikut mengilustrasikan apa itu transaksi ambient, dengan konteks System.EnterpriseServices tertentu, dan cakupan transaksional yang mengharuskan agar transaksi menggunakan enumerasi EnterpriseServicesInteropOption.

Konteks ES Tidak Otomatis Penuh
Konteks default ST ST ES
Konteks non-default ST ES ES

Dalam tabel sebelumnya: