Membuat Elemen Pengikat

Pengikatan serta elemen pengikatan (objek yang memperluas System.ServiceModel.Channels.Binding dan System.ServiceModel.Channels.BindingElement, masing-masing) adalah tempat di mana model aplikasi Windows Communication Foundation (WCF) dikaitkan dengan pabrik saluran dan pendengar saluran. Tanpa pengikatan, menggunakan saluran kustom memerlukan pemrograman di tingkat saluran seperti yang dijelaskan dalam Pemrograman Channel-Level Layanan dan Pemrograman Channel-Level 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. BindingElement objek dapat digunakan dari System.ServiceModel.ServiceHost kelas untuk menghubungkan aplikasi WCF ke saluran Anda tanpa memerlukan informasi tipe yang tepat tentang saluran Anda.

Setelah BindingElement dibuat, Anda dapat mengaktifkan lebih banyak fungsionalitas tergantung pada kebutuhan Anda dengan mengikuti langkah-langkah pengembangan saluran yang tersisa yang dijelaskan dalam Mengembangkan Saluran.

Menambahkan Elemen Pengikatan

Untuk menerapkan kustom BindingElement, tulis kelas yang mewarisi dari BindingElement. Misalnya, jika Anda telah mengembangkan ChunkingChannel yang dapat memecah pesan besar menjadi gugus dan menyusunnya kembali di ujung lain, Anda dapat menggunakan saluran ini dalam pengikatan apa pun dengan mengimplementasikan BindingElement dan mengonfigurasi pengikatan untuk menggunakannya. Sisa topik ini menggunakan ChunkingChannel sebagai contoh untuk menunjukkan persyaratan penerapan elemen pengikatan.

A ChunkingBindingElement bertanggung jawab untuk membuat ChunkingChannelFactory dan ChunkingChannelListener. Ini menerapkan penggantian pada implementasi CanBuildChannelFactory dan CanBuildChannelListener, dan memeriksa bahwa parameter jenis adalah IDuplexSessionChannel (dalam contoh kami ini adalah satu-satunya bentuk saluran yang didukung oleh ChunkingChannel) serta memastikan elemen pengikatan lainnya mendukung bentuk saluran ini.

BuildChannelFactory pertama-tama memeriksa bahwa bentuk saluran yang diminta dapat dibangun dan kemudian mendapatkan daftar tindakan pesan yang akan dipecah menjadi bagian-bagian. Kemudian membuat ChunkingChannelFactory baru dan meneruskannya ke pabrik saluran internal. (Jika Anda membuat elemen pengikatan transportasi, elemen tersebut adalah yang terakhir di 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 menggunakan saluran transport, sampel Transport: UDP menyediakan penggantian berikut.

Dalam sampel, elemen pengikatan adalah UdpTransportBindingElement, yang berasal dari TransportBindingElement. Ini mengesampingkan metode berikut untuk mengembangkan 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 pengikatan yang disertakan, menambahkan transportasi baru, pengodean, atau protokol tingkat yang lebih tinggi. Untuk membuat Elemen Pengikatan Protokol baru, mulailah dengan memperluas BindingElement kelas. Setidaknya, Anda harus menerapkan BindingElement.Clone dan mengimplementasikan ChannelProtectionRequirements dengan menggunakan IChannel.GetProperty. Ini mengembalikan ChannelProtectionRequirements untuk elemen pengikatan ini. Untuk informasi selengkapnya, lihat ChannelProtectionRequirements .

Clone harus mengembalikan salinan baru elemen pengikatan ini. Sebagai praktik terbaik, kami menyarankan agar penulis elemen pengikatan menerapkan Clone dengan menggunakan konstruktor salinan yang memanggil konstruktor salinan dasar, lalu mengkloning bidang tambahan apa pun di kelas ini.

Elemen Pengikatan Transportasi

Untuk membuat Elemen Pengikatan Transportasi baru, perluas TransportBindingElement antarmuka. Setidaknya, Anda kemudian harus menerapkan Clone metode dan TransportBindingElement.Scheme properti.

Clone – Harus menghasilkan salinan baru dari elemen pengikatan ini. Sebagai praktik terbaik, kami menyarankan agar penulis Binding Element menerapkan Clone melalui konstruktor salinan yang memanggil konstruktor salinan dasarnya, kemudian mengkloning bidang tambahan apa pun 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 masing-masing Scheme .

Elemen Pengodean Pengikatan

Untuk membuat Elemen Pengikatan Pengodean baru, mulailah dengan memperluas BindingElement kelas dan menerapkan System.ServiceModel.Channels.MessageEncodingBindingElement kelas . Setidaknya, Anda kemudian harus menerapkan metode Clone, MessageEncodingBindingElement.CreateMessageEncoderFactory dan properti MessageEncodingBindingElement.MessageVersion.

  • Clone. Mengembalikan salinan baru elemen pengikatan ini. Sebagai praktik terbaik, kami menyarankan agar penulis elemen pengikatan menerapkan Clone dengan menggunakan konstruktor salinan yang memanggil konstruktor salinan dasar, lalu mengkloning bidang tambahan apa pun di kelas ini.

  • CreateMessageEncoderFactory. Mengembalikan MessageEncoderFactory, yang menyediakan handle ke kelas yang benar-benar mengimplementasikan encoder baru Anda dan harus memperluas MessageEncoder. Untuk informasi lebih lanjut, lihat MessageEncoderFactory dan MessageEncoder.

  • MessageVersion. Mengembalikan MessageVersion yang digunakan dalam pengodean ini, mewakili versi SOAP dan WS-Addressing yang sedang 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 User-Defined.

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 cara menambahkan dukungan publikasi metadata, dan apakah dan cara membuat pengikatan yang ditentukan pengguna yang menggunakan elemen pengikatan Anda.

Lihat juga