Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Windows Communication Foundation (WCF) menyediakan opsi yang sangat fleksibel untuk mengontrol alur transaksi. Pengaturan alur transaksi layanan dapat diekspresikan menggunakan kombinasi atribut dan konfigurasi.
Pengaturan Alur Transaksi
Pengaturan alur transaksi dihasilkan untuk titik akhir layanan sebagai akibat dari persimpangan dari tiga nilai berikut:
Atribut TransactionFlowAttribute yang ditentukan untuk setiap metode dalam kontrak layanan.
Properti
TransactionFlowpengikatan dalam pengikatan spesifik.Properti
TransactionFlowProtocolpengikatan dalam pengikatan spesifik. PropertiTransactionFlowProtocolpengikatan memungkinkan Anda memilih di antara dua protokol transaksi berbeda yang dapat Anda gunakan untuk mengalirkan transaksi. Bagian berikut ini secara singkat menjelaskan masing-masing bagian tersebut.
Protokol WS-AtomicTransaction
Protokol WS-AtomicTransaction (WS-AT) berguna untuk skenario ketika interoperabilitas dengan tumpukan protokol pihak ketiga diperlukan.
Protokol OleTransactions
Protokol OleTransactions berguna untuk skenario ketika interoperabilitas dengan tumpukan protokol pihak ketiga tidak diperlukan, dan penyebar layanan tahu terlebih dahulu 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 berbagai kombinasi ini.
| TransactionFlow ikatan |
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 mengalir dalam format WCF OleTransactions. |
| Wajib | tidak benar | Tidak berlaku | Tidak berlaku karena ini adalah konfigurasi yang tidak valid. |
| Diperbolehkan | benar | WS-AT | Transaksi dapat mengalir dalam format WS-AT yang dapat dioperasikan. |
| Diperbolehkan | benar | OleTransactions | Transaksi dapat mengalir dalam format WCF OleTransactions. |
| Diperbolehkan | tidak benar | Nilai apa pun | Transaksi tidak diproses. |
| Tidak Diizinkan | Nilai apa pun | Nilai apa pun | Transaksi tidak diproses. |
Tabel berikut ini meringkas hasil pemrosesan pesan.
| Pesan masuk | Pengaturan TransactionFlow | Header transaksi | Hasil pemrosesan pesan |
|---|---|---|---|
| Transaksi cocok dengan format protokol yang diharapkan | Diizinkan atau Wajib |
MustUnderstand
truesama dengan . |
Proses |
| Transaksi tidak cocok dengan format protokol yang diharapkan | Wajib |
MustUnderstand
falsesama dengan . |
Ditolak karena transaksi diperlukan |
| Transaksi tidak cocok dengan format protokol yang diharapkan | Diperbolehkan |
MustUnderstand
falsesama dengan . |
Ditolak karena header tidak dipahami |
| Transaksi menggunakan format protokol apa pun | Tidak Diizinkan |
MustUnderstand
falsesama dengan . |
Ditolak karena header tidak dipahami |
| Tidak ada transaksi | Wajib | Tidak tersedia | Ditolak karena transaksi diperlukan |
| Tidak ada transaksi | Diperbolehkan | Tidak tersedia | Proses |
| Tidak ada transaksi | Tidak Diizinkan | Tidak tersedia | Proses |
Meskipun setiap metode pada kontrak dapat memiliki persyaratan alur transaksi yang berbeda, pengaturan protokol alur transaksi terlingkup pada tingkat pengikatan. Ini berarti bahwa semua metode yang memiliki titik akhir yang sama (dan oleh 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 pada Tingkat Metode
Persyaratan alur transaksi tidak selalu sama untuk semua metode dalam kontrak layanan. Oleh karena itu, WCF juga menyediakan mekanisme berbasis atribut untuk memungkinkan preferensi alur transaksi setiap metode diekspresikan. 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 Anda ingin mengaktifkan alur transaksi. Atribut ini mengambil salah satu nilai TransactionFlowOption enumerasi, di mana nilai defaultnya adalah NotAllowed. Jika ada nilai kecuali NotAllowed ditentukan, metode tidak boleh 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 oleh atribut TransactionFlowAttribute, WCF menyediakan pengaturan alur transaksi tingkat titik akhir untuk memungkinkan administrator mengontrol alur transaksi pada tingkat yang lebih tinggi.
Ini dicapai oleh TransactionFlowBindingElement, yang memungkinkan Anda mengaktifkan atau menonaktifkan alur transaksi masuk dalam pengaturan pengikatan titik akhir, serta untuk 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 binding yang disediakan WCF berisi atribut transactionFlow dan transactionProtocol yang memungkinkan Anda mengonfigurasi binding tertentu untuk menerima transaksi masuk. Untuk informasi selengkapnya tentang mengatur elemen konfigurasi, lihat <pengikatan>.
Administrator atau penyebar dapat menggunakan alur transaksi tingkat titik akhir untuk mengonfigurasi persyaratan alur transaksi atau batasan pada waktu penyebaran menggunakan file konfigurasi.
Keamanan
Untuk memastikan keamanan dan integritas sistem, Anda harus mengamankan pertukaran pesan saat mengalirkan transaksi antar aplikasi. Anda tidak boleh mengalir atau mengungkapkan detail transaksi ke aplikasi apa pun yang tidak berhak berpartisipasi dalam transaksi yang sama.
Ketika menghasilkan klien WCF untuk layanan Web yang tidak diketahui atau tidak tepercaya melalui penggunaan pertukaran metadata, panggilan ke operasi pada layanan Web ini harus meniadakan transaksi saat ini jika memungkinkan. Contoh berikut menunjukkan cara melakukan ini.
//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 diautentikasi dan diotorisasi. Transaksi 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. Klien kemudian dapat memproses dokumen kebijakan untuk menentukan operasi mana pada kontrak layanan yang dapat mendukung atau memerlukan 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. Setiap pesan dengan header yang ditandai sebaliknya ditolak dengan kesalahan SOAP.
Hanya satu pernyataan kebijakan terkait transaksi yang dapat hadir 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 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.