Bagikan melalui


Mengaktifkan Alur Transaksi

Windows Communication Foundation (WCF) menyediakan opsi yang sangat fleksibel untuk mengontrol alur transaksi. Pengaturan alur transaksi layanan dapat dinyatakan menggunakan kombinasi atribut dan konfigurasi.

Pengaturan Alur Transaksi

Pengaturan alur transaksi dibuat untuk titik akhir layanan sebagai hasil dari titik temu tiga nilai berikut:

  • Atribut TransactionFlowAttribute yang ditentukan untuk setiap metode dalam kontrak layanan.

  • Properti pengikatan TransactionFlow dalam pengikatan tertentu.

  • Properti pengikatan TransactionFlowProtocol dalam pengikatan tertentu. Properti pengikatan TransactionFlowProtocol memungkinkan Anda memilih di antara dua protokol transaksi berbeda yang dapat Anda gunakan untuk mengalirkan transaksi. Bagian berikut secara singkat menjelaskan tiap-tiap protokol.

Protokol WS-AtomicTransaction

Protokol WS-AtomicTransaction (WS-AT) berguna untuk skenario saat interoperabilitas dengan tumpukan protokol pihak ketiga diperlukan.

Protokol OleTransactions

Protokol OleTransactions berguna untuk skenario saat interoperabilitas dengan tumpukan protokol pihak ketiga tidak diperlukan, dan penyebar layanan tahu di awal bahwa layanan protokol WS-AT dinonaktifkan secara lokal atau topologi jaringan yang ada tidak mendukung penggunaan WS-AT.

Tabel berikut menunjukkan berbagai jenis alur transaksi yang dapat dihasilkan menggunakan variasi kombinasi berikut.

TransactionFlow

Azure Storage
Properti pengikatan TransactionFlow Protokol pengikatan TransactionFlowProtocol Jenis alur transaksi
Wajib benar WS-AT Transaksi harus dialirkan dalam format WS-AT yang dapat dioperasikan.
Wajib benar OleTransactions Transaksi harus dialirkan dalam format OleTransactions WCF.
Wajib salah Tidak berlaku Tidak berlaku karena ini adalah konfigurasi yang tidak valid.
Diizinkan benar WS-AT Transaksi bisa dialirkan dalam format WS-AT yang dapat dioperasikan.
Diizinkan benar OleTransactions Transaksi bisa dialirkan dalam format WCF OleTransactions.
Diizinkan salah Nilai apa pun Transaksi tidak dialirkan.
NotAllowed Nilai apa pun Nilai apa pun Transaksi tidak dialirkan.

Tabel berikut merangkum hasil pemrosesan pesan.

Pesan masuk Pengaturan TransactionFlow Header transaksi Hasil pemrosesan pesan
Transaksi cocok dengan format protokol yang diharapkan Diperbolehkan atau Wajib MustUnderstand sama dengan true. Proses
Transaksi tidak cocok dengan format protokol yang diharapkan Wajib MustUnderstand sama dengan false. Ditolak karena transaksi diperlukan
Transaksi tidak cocok dengan format protokol yang diharapkan Diizinkan MustUnderstand sama dengan false. Ditolak karena header tidak bisa dipahami
Transaksi menggunakan format protokol apa pun NotAllowed MustUnderstand sama dengan false. Ditolak karena header tidak bisa dipahami
Tidak ada transaksi Wajib T/A Ditolak karena transaksi diperlukan
Tidak ada transaksi Diizinkan T/A Proses
Tidak ada transaksi NotAllowed T/A Proses

Sementara setiap metode pada kontrak dapat memiliki persyaratan alur transaksi yang berbeda, pengaturan protokol alur transaksi dicakup pada tingkat pengikatan. Hal ini berarti, semua metode yang berbagi titik akhir yang sama (dan karena itu pengikatan yang sama) juga berbagi kebijakan yang sama yang memungkinkan atau memerlukan alur transaksi, serta protokol transaksi yang sama jika berlaku.

Mengaktifkan Alur Transaksi di Tingkat Metode

Persyaratan alur transaksi tidak selalu sama untuk semua metode dalam kontrak layanan. Oleh karena itu, WCF juga menyediakan mekanisme berbasis atribut untuk mengizinkan preferensi alur transaksi masing-masing metode diekspresikan. Hal ini dicapai oleh TransactionFlowAttribute yang menentukan tingkat di mana operasi layanan menerima header transaksi. Anda harus menandai metode kontrak layanan Anda dengan atribut ini jika ingin mengaktifkan alur transaksi. Atribut ini menggunakan salah satu nilai enumerasi TransactionFlowOption, yang nilai default-nya adalah NotAllowed. Jika ada nilai kecuali NotAllowed ditentukan, metode harus tidak satu arah. Pengembang dapat menggunakan atribut ini untuk menentukan persyaratan atau batasan alur transaksi tingkat metode pada waktu desain.

Mengaktifkan Alur Transaksi di Tingkat Titik Akhir

Selain pengaturan alur transaksi tingkat metode yang disediakan atribut TransactionFlowAttribute, WCF menyediakan pengaturan seluruh titik akhir untuk alur transaksi untuk mengizinkan administrator mengontrol alur transaksi pada tingkat yang lebih tinggi.

Hal ini dicapai oleh TransactionFlowBindingElement, yang memungkinkan Anda mengaktifkan atau menonaktifkan alur transaksi masuk dalam pengaturan pengikatan titik akhir, serta menentukan format protokol transaksi yang diinginkan untuk transaksi masuk.

Jika pengikatan telah menonaktifkan alur transaksi, tetapi salah satu operasi pada kontrak layanan memerlukan transaksi masuk, maka pengecualian validasi dilemparkan pada startup layanan.

Sebagian besar pengikatan berdiri yang disediakan WCF berisi atribut transactionFlow dan transactionProtocol untuk memungkinkan Anda mengonfigurasi pengikatan tertentu guna menerima transaksi masuk. Untuk informasi selengkapnya tentang mengatur elemen konfigurasi, lihat <pengikatan>.

Administrator atau penyebar dapat menggunakan alur transaksi tingkat akhir untuk mengonfigurasi persyaratan atau batasan alur transaksi pada saat penyebaran menggunakan file konfigurasi.

Keamanan

Untuk memastikan keamanan dan integritas sistem, Anda harus mengamankan pertukaran pesan saat mengalirkan transaksi antar aplikasi. Anda tidak boleh mengalirkan atau mengungkapkan detail transaksi ke aplikasi apa pun yang tidak berhak berpartisipasi dalam transaksi yang sama.

Saat menghasilkan klien WCF ke layanan Web yang tidak dikenal atau tidak tepercaya melalui penggunaan pertukaran metadata, panggilan ke operasi pada layanan Web ini harus menekan transaksi saat ini jika memungkinkan. Contoh berikut menunjukkan cara melakukannya.

//client code which has an ambient transaction  
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))  
{  
    // No transaction will flow to this operation  
    untrustedProxy.Operation1(...);  
    scope.Complete();  
}  
//remainder of client code  

Selain itu, layanan harus dikonfigurasi untuk menerima transaksi masuk hanya dari klien yang telah mereka autentikasi dan otorisasi. Transaksi yang masuk hanya boleh diterima jika berasal dari klien yang sangat tepercaya.

Pernyataan Kebijakan

WCF menggunakan pernyataan kebijakan untuk mengontrol alur transaksi. Pernyataan kebijakan dapat ditemukan dalam dokumen kebijakan layanan, yang dihasilkan dengan menggabungkan kontrak, konfigurasi, dan atribut. Klien dapat memperoleh dokumen kebijakan layanan menggunakan HTTP GET atau balasan permintaan WS-MetadataExchange. Selanjutnya, klien dapat memproses dokumen kebijakan untuk menentukan operasi mana pada kontrak layanan yang mungkin mendukung atau mewajibkan alur transaksi.

Pernyataan kebijakan alur transaksi memengaruhi alur transaksi dengan menentukan header SOAP yang harus dikirim klien ke layanan untuk mewakili transaksi. Semua header transaksi harus ditandai dengan MustUnderstandsama dengan true. Pesan apa pun dengan header yang ditandai sebaliknya akan ditolak dengan kesalahan SOAP.

Hanya satu pernyataan kebijakan terkait transaksi yang dapat ada pada satu operasi. Dokumen kebijakan dengan lebih dari satu pernyataan transaksi pada operasi dianggap tidak valid dan ditolak oleh WCF. Selain itu, hanya satu protokol transaksi yang dapat ada di dalam setiap jenis port. Dokumen kebijakan dengan operasi yang mereferensikan ke lebih dari satu protokol transaksi di dalam satu jenis port dianggap tidak valid, dan ditolak oleh Alat Utilitas Metadata ServiceModel (Svcutil.exe). Dokumen kebijakan dengan pernyataan transaksi yang ada pada pesan output atau pesan input satu arah juga dianggap tidak valid.