Membuat BindingElement
Pengikatan dan elemen pengikatan (objek yang masing-masing memperluas System.ServiceModel.Channels.Binding dan System.ServiceModel.Channels.BindingElement) adalah tempat di mana model aplikasi WCF dikaitkan dengan pabrik saluran dan pendengar saluran. Tanpa pengikatan, penggunaan saluran kustom memerlukan pemrograman di tingkat saluran seperti yang dijelaskan dalam Pemrograman Tingkat Saluran Layanan dan Pemrograman Tingkat Saluran Klien. Topik ini membahas persyaratan minimum untuk mengaktifkan penggunaan saluran Anda di WCF, pengembangan BindingElement untuk saluran Anda, dan mengaktifkan penggunaan dari aplikasi seperti yang dijelaskan di langkah 4 dari Mengembangkan Saluran.
Gambaran Umum
Membuat BindingElement untuk saluran Anda memungkinkan pengembang untuk menggunakannya dalam aplikasi WCF. Objek BindingElement dapat digunakan dari kelas System.ServiceModel.ServiceHost untuk menghubungkan aplikasi WCF ke saluran Anda tanpa harus mengetahui jenis informasi saluran yang tepat.
Setelah BindingElement dibuat, Anda dapat mengaktifkan lebih banyak fungsionalitas, tergantung pada kebutuhan Anda, dengan mengikuti langkah pengembangan saluran lainnya yang dijelaskan dalam Mengembangkan Saluran.
Menambahkan Elemen Pengikatan
Untuk menerapkan BindingElement kustom, tulis kelas yang mewarisi dari BindingElement. Misalnya, jika Anda telah mengembangkan ChunkingChannel
yang dapat memecah pesan besar menjadi beberapa bagian dan memasangnya kembali di ujung yang lain, Anda dapat menggunakan saluran ini dalam pengikatan apa saja dengan menerapkan BindingElement dan mengonfigurasi pengikatan untuk menggunakannya. Sisa dari topik ini menggunakan ChunkingChannel
sebagai contoh untuk mendemonstrasikan persyaratan penerapan elemen pengikat.
ChunkingBindingElement
bertanggung jawab untuk membuat ChunkingChannelFactory
dan ChunkingChannelListener
. Ini mengambil alih implementasi CanBuildChannelFactory dan CanBuildChannelListener, dan memeriksa apakah parameter jenisnya adalah IDuplexSessionChannel (dalam contoh kami, ini adalah satu-satunya bentuk saluran yang didukung oleh ChunkingChannel
) dan elemen ikatan lainnya dalam pengikatan mendukung bentuk saluran ini.
BuildChannelFactory pertama-tama memeriksa apakah bentuk saluran yang diminta dapat dibuat dan kemudian mendapatkan daftar tindakan pesan yang akan dipotong. Kemudian membuat ChunkingChannelFactory
baru, meneruskannya ke pabrik saluran dalam. (Jika Anda membuat elemen pengikat transportasi, elemen tersebut adalah elemen terakhir dalam tumpukan pengikatan dan oleh karena itu harus membuat pendengar saluran atau pabrik saluran.)
BuildChannelListener memiliki implementasi serupa untuk membuat ChunkingChannelListener
dan meneruskannya ke pendengar saluran dalam.
Sebagai contoh lain dalam penggunaan saluran transportasi, sampel Transportasi: UDP memberikan penggantian berikut.
Dalam sampel, elemen pengikatan adalah UdpTransportBindingElement
, yang berasal dari TransportBindingElement. Ini mengambil alih metode berikut untuk membangun pabrik yang terkait dengan saluran.
public IChannelFactory<TChannel> BuildChannelFactory<TChannel>(BindingContext context)
{
return (IChannelFactory<TChannel>)(object)new UdpChannelFactory(this, context);
}
public IChannelListener<TChannel> BuildChannelListener<TChannel>(BindingContext context)
{
return (IChannelListener<TChannel>)(object)new UdpChannelListener(this, context);
}
Ini juga berisi anggota untuk mengkloning BindingElement
dan mengembalikan skema kami (soap.udp).
Elemen Pengikatan Protokol
Elemen pengikatan baru dapat menggantikan atau menambah salah satu elemen pengikat yang disertakan, menambahkan transportasi baru, pengodean, atau protokol tingkat yang lebih tinggi. Untuk membuat Elemen Pengikatan Protokol baru, mulailah dengan memperluas kelas BindingElement. Minimal, Anda kemudian harus menerapkan BindingElement.Clone dan menerapkan ChannelProtectionRequirements
menggunakan IChannel.GetProperty. Ini mengembalikan ChannelProtectionRequirements untuk elemen pengikatan ini. Untuk informasi selengkapnya, lihat ChannelProtectionRequirements .
Clone harus mengembalikan salinan baru dari elemen pengikatan ini. Praktik terbaiknya, kami sarankan agar penulis elemen pengikatan menerapkan Clone dengan menggunakan konstruktor salinan yang memanggil konstruktor salinan dasar, lalu mengkloning bidang tambahan di kelas ini.
Elemen Pengikatan Transportasi
Untuk membuat Elemen Pengikatan Transportasi baru, perluas antarmuka TransportBindingElement. Minimal, Anda kemudian harus menerapkan metode Clone dan properti TransportBindingElement.Scheme.
Clone – Harus mengembalikan salinan baru dari Elemen Pengikatan ini. Praktik terbaiknya, kami sarankan agar penulis Elemen Pengikatan mengimplementasikan Klon melalui konstruktor salinan yang memanggil konstruktor salinan dasar, lalu mengkloning bidang tambahan di kelas ini.
Scheme – Properti Scheme get mengembalikan skema URI untuk protokol transportasi yang diwakili oleh elemen pengikatan. Misalnya, System.ServiceModel.Channels.HttpTransportBindingElement dan System.ServiceModel.Channels.TcpTransportBindingElement mengembalikan "http" dan "net.tcp" dari properti Scheme masing-masing.
Elemen Pengikatan Pengodean
Untuk membuat Elemen Pengikatan Pengodean baru, mulailah dengan memperluas kelas BindingElement dan menerapkan kelas System.ServiceModel.Channels.MessageEncodingBindingElement. Minimal, Anda kemudian harus menerapkan Clone, metode MessageEncodingBindingElement.CreateMessageEncoderFactory, dan properti MessageEncodingBindingElement.MessageVersion.
Clone. Mengembalikan salinan baru dari elemen pengikatan ini. Praktik terbaiknya, kami sarankan agar penulis elemen pengikatan menerapkan Clone dengan menggunakan konstruktor salinan yang memanggil konstruktor salinan dasar, lalu mengkloning bidang tambahan di kelas ini.
CreateMessageEncoderFactory. Mengembalikan MessageEncoderFactory, yang memberikan handel ke kelas aktual yang mengimplementasikan encoder baru Anda dan yang harus memperluas MessageEncoder. Untuk informasi lebih lanjut, lihat MessageEncoderFactory dan MessageEncoder.
MessageVersion. Mengembalikan MessageVersion yang digunakan dalam pengodean ini, yang mewakili versi SOAP dan WS-Addressing yang digunakan.
Untuk daftar lengkap metode dan properti opsional untuk elemen pengikatan pengodean yang ditentukan pengguna, lihat MessageEncodingBindingElement.
Untuk informasi selengkapnya tentang membuat elemen pengikatan baru, lihat Membuat Pengikatan Buatan Pengguna.
Setelah Anda membuat elemen pengikatan untuk saluran Anda, kembali ke topik Mengembangkan Saluran untuk melihat apakah Anda ingin menambahkan dukungan file konfigurasi ke elemen pengikatan Anda, jika dan bagaimana menambahkan dukungan publikasi metadata, dan apakah dan bagaimana cara membuat pengikatan yang ditentukan pengguna yang menggunakan elemen pengikatan Anda.