Bagikan melalui


Membuat Pengikatan yang Ditentukan Pengguna

Ada beberapa cara untuk membuat pengikatan yang tidak disediakan oleh sistem:

  • Buat pengikatan kustom, berdasarkan kelas CustomBinding, yang merupakan kontainer yang Anda isi dengan elemen pengikatan. Pengikatan kustom kemudian ditambahkan ke titik akhir layanan. Anda dapat membuat pengikatan kustom baik secara terprogram atau dalam file konfigurasi aplikasi. Untuk menggunakan elemen pengikatan dari file konfigurasi aplikasi, elemen pengikatan harus memperluas BindingElementExtensionElement. Untuk informasi selengkapnya tentang pengikatan kustom, lihat Pengikatan Kustom dan CustomBinding.

  • Anda dapat membuat kelas yang merupakan turunan dari pengikatan standar. Misalnya, Anda dapat menurunkan kelas dari WSHttpBinding dan mengambil alih metode CreateBindingElements untuk mendapatkan elemen pengikatan dan menyisipkan elemen pengikatan kustom atau menetapkan nilai tertentu untuk keamanan.

  • Anda dapat membuat jenis Binding baru untuk sepenuhnya mengontrol seluruh implementasi pengikatan.

Urutan Elemen Pengikatan

Setiap elemen pengikatan mewakili langkah pemrosesan saat mengirim atau menerima pesan. Pada durasi, elemen pengikatan membuat saluran dan pendengar yang diperlukan untuk membangun tumpukan saluran keluar dan masuk.

Ada tiga jenis utama elemen pengikatan: Elemen Pengikatan Protokol, Elemen Pengikatan Pengodean, dan Elemen Pengikatan Transportasi.

Elemen Pengikatan Protokol – Elemen-elemen ini mewakili langkah-langkah pemrosesan tingkat lebih tinggi yang bertindak berdasarkan pesan. Saluran dan pendengar yang dibuat oleh elemen pengikatan ini dapat menambahkan, menghapus, atau mengubah konten pesan. Pengikatan tertentu mungkin memiliki jumlah elemen pengikatan protokol arbitrer, masing-masing mewarisi dari BindingElement. Windows Communication Foundation (WCF) mencakup beberapa elemen pengikatan protokol, meliputi ReliableSessionBindingElement dan SymmetricSecurityBindingElement.

Elemen Pengikatan Pengodean – Elemen-elemen ini mewakili transformasi antara pesan dan pengodean yang siap untuk transmisi pada kabel. Pengikatan WCF yang khas meliputi satu elemen pengikatan pengodean. Contoh elemen pengikatan pengodean meliputi MtomMessageEncodingBindingElement, BinaryMessageEncodingBindingElement, dan TextMessageEncodingBindingElement. Jika elemen pengikatan pengodean tidak ditentukan untuk pengikatan, pengodean default akan digunakan. Defaultnya adalah teks saat transportasi adalah HTTP dan biner jika sebaliknya.

Elemen Pengikatan Transportasi – Elemen-elemen ini mewakili transmisi pesan pengodean pada protokol transportasi. Pengikatan WCF umum meliputi satu elemen pengikatan transportasi, yang mewarisi dari TransportBindingElement. Contoh elemen pengikatan transportasi meliputi TcpTransportBindingElement, HttpTransportBindingElement, dan NamedPipeTransportBindingElement.

Saat membuat pengikatan baru, urutan elemen pengikatan yang ditambahkan menjadi penting. Selalu tambahkan elemen pengikatan dalam urutan berikut:

Lapisan Opsi Wajib
Alur Transaksi System.ServiceModel.Channels.TransactionFlowBindingElement No
Keandalan System.ServiceModel.Channels.ReliableSessionBindingElement No
Keamanan System.ServiceModel.Channels.SecurityBindingElement No
Dupleks Komposit System.ServiceModel.Channels.CompositeDuplexBindingElement No
Pengodean Text, Binary, MTOM, Custom Ya*
Transportasi TCP, Pipa yang Dinamai, HTTP, HTTPS, MSMQ, Kustom Ya

*Karena pengodean diperlukan untuk setiap pengikatan, jika pengodean tidak ditentukan, WCF akan menambahkan pengodean default untuk Anda. Defaultnya adalah Teks/XML untuk transportasi HTTP dan HTTPS, serta Biner jika sebaliknya.

Membuat Elemen Pengikatan baru

Selain jenis yang merupakan turunan dari BindingElement yang disediakan oleh WCF, Anda bisa membuat elemen pengikatan Anda sendiri. Hal ini memungkinkan Anda menyesuaikan cara tumpukan pengikatan dibuat dan komponen yang masuk ke dalamnya dengan membuat BindingElement milik Anda sendiri yang dapat disusun dengan jenis lain yang disediakan sistem dalam tumpukan.

Misalnya, jika Anda menerapkan LoggingBindingElement yang menyediakan kemampuan untuk mencatat pesan ke database, Anda harus menempatkannya di atas saluran transportasi di tumpukan saluran. Dalam hal ini, aplikasi membuat pengikatan kustom yang menyusun LoggingBindingElement dengan TcpTransportBindingElement, seperti dalam contoh berikut.

Binding customBinding = new CustomBinding(  
  new LoggingBindingElement(),
  new TcpTransportBindingElement()  
);  

Cara Anda menulis elemen pengikatan baru bergantung pada fungsionalitasnya. Salah satu sampel, Transportasi: UDP, memberikan deskripsi terperinci tentang cara mengimplementasikan satu jenis elemen pengikatan.

Membuat Pengikatan Baru

Elemen pengikatan yang dibuat pengguna dapat digunakan dengan dua cara. Bagian sebelumnya mengilustrasikan cara pertama: melalui pengikatan kustom. Pengikatan kustom memungkinkan pengguna untuk membuat pengikatan mereka sendiri berdasarkan serangkaian elemen pengikatan arbitrer, termasuk yang dibuat pengguna.

Jika Anda menggunakan pengikatan di lebih dari satu aplikasi, buat pengikatan Anda sendiri dan perluas Binding. Hal ini menghindari pembuatan pengikatan kustom secara manual setiap kali Anda ingin menggunakannya. Pengikatan yang ditentukan pengguna memungkinkan Anda menentukan perilaku pengikatan dan menyertakan elemen pengikatan yang ditentukan pengguna. Elemen itu telah dikemas sebelumnya: Anda tidak perlu membangun ulang pengikatan setiap kali Anda menggunakannya.

Minimal, pengikatan yang ditentukan pengguna harus mengimplementasikan metode CreateBindingElements dan properti Scheme.

Metode CreateBindingElements menampilkan BindingElementCollection baru yang berisi elemen pengikatan untuk pengikatan. Koleksi diurutkan, dan harus berisi elemen pengikatan protokol terlebih dahulu, diikuti oleh elemen pengikatan pengodean, diikuti oleh elemen pengikatan transportasi. Saat menggunakan elemen pengikatan yang disediakan sistem WCF, Anda harus mengikuti aturan pengurutan elemen pengikatan yang ditentukan dalam Pengikatan Kustom. Koleksi ini tidak boleh mereferensikan objek yang direferensikan dalam kelas pengikatan yang ditentukan pengguna; akibatnya, pembuat pengikatan harus menampilkan Clone() dari BindingElementCollection pada setiap panggilan ke CreateBindingElements.

Properti Scheme mewakili skema URI untuk protokol transportasi yang digunakan pada pengikatan. Misalnya, WSHttpBinding dan NetTcpBinding menampilkan "http" dan "net.tcp" dari properti Scheme masing-masing.

Untuk daftar lengkap metode dan properti opsional untuk pengikatan yang ditentukan pengguna, lihat Binding.

Contoh

Sampel ini mengimplementasikan pengikatan profil di SampleProfileUdpBinding, yang merupakan turunan dari Binding. SampleProfileUdpBinding berisi hingga empat elemen pengikatan di dalamnya: satu UdpTransportBindingElement yang dibuat pengguna; dan tiga yang disediakan sistem: TextMessageEncodingBindingElement, CompositeDuplexBindingElement, dan ReliableSessionBindingElement.

public override BindingElementCollection CreateBindingElements()  
{
    BindingElementCollection bindingElements = new BindingElementCollection();  
    if (ReliableSessionEnabled)  
    {  
        bindingElements.Add(session);  
        bindingElements.Add(compositeDuplex);  
    }  
    bindingElements.Add(encoding);  
    bindingElements.Add(transport);  
    return bindingElements.Clone();  
}  

Pembatasan Keamanan dengan Kontrak Dupleks

Tidak semua elemen pengikatan kompatibel dengan satu sama lain. Secara khusus, ada beberapa batasan pada elemen pengikatan keamanan saat digunakan dengan kontrak dupleks.

Keamanan Satu Kali

Anda dapat mengimplementasikan keamanan "satu kali", di mana semua kredensial keamanan yang diperlukan dikirim dalam satu pesan, dengan mengatur atribut negotiateServiceCredential pada elemen konfigurasi <pesan> ke false.

Autentikasi satu kali tidak berfungsi dengan kontrak dupleks.

Untuk kontrak Permintaan-Balasan, autentikasi satu kali hanya berfungsi jika tumpukan pengikatan di bawah elemen pengikatan keamanan mendukung pembuatan instans IRequestChannel atau IRequestSessionChannel.

Untuk kontrak Permintaan-Balasan, autentikasi satu kali hanya berfungsi jika tumpukan pengikatan di bawah elemen pengikatan keamanan mendukung pembuatan instans IRequestChannel, IRequestSessionChannel, IOutputChannel, atau IOutputSessionChannel.

Token konteks keamanan mode cookie tidak dapat digunakan dengan kontrak dupleks.

Untuk kontrak Permintaan-Balasan, token konteks keamanan mode cookie hanya berfungsi jika tumpukan pengikatan di bawah elemen pengikatan keamanan mendukung pembuatan instans IRequestChannel atau IRequestSessionChannel.

Untuk kontrak satu arah, token konteks keamanan mode cookie hanya berfungsi jika tumpukan pengikatan di bawah elemen pengikatan keamanan mendukung pembuatan instans IRequestChannel atau IRequestSessionChannel.

Token Konteks Keamanan Mode Sesi

SCT mode sesi berfungsi untuk kontrak dupleks jika tumpukan pengikatan di bawah elemen pengikatan keamanan mendukung pembuatan instans IDuplexChannel atau IDuplexSessionChannel.

SCT mode sesi berfungsi untuk kontrak Permintaan-Balasan jika tumpukan pengikatan di bawah elemen pengikatan keamanan mendukung pembuatan instans IDuplexChannel, IDuplexSessionChannel, IRequestChannel, atau IRequestSessionChannel.

SCT mode sesi berfungsi untuk kontrak satu arah jika tumpukan pengikatan di bawah elemen pengikatan keamanan mendukung pembuatan instans IDuplexChannel, IDuplexSessionChannel,.IRequestChannel, atau IRequestSessionChannel.

Mengambil dari Pengikatan Standar

Sebagai ganti membuat kelas pengikatan yang baru, Anda mungkin dapat memperluas salah satu pengikatan yang disediakan sistem yang sudah ada. Sama seperti kasus sebelumnya, Anda harus mengambil alih metode CreateBindingElements dan properti Scheme.

Lihat juga