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 pengikatanTransactionFlowProtocol
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 MustUnderstand
sama 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.