Layanan: Pendengar saluran dan saluran
Ada tiga kategori objek saluran: saluran, pendengar saluran, dan pabrik saluran. Saluran adalah antarmuka antara aplikasi dan tumpukan saluran. Pendengar saluran bertanggung jawab untuk membuat saluran di sisi terima (atau dengarkan), biasanya sebagai respons terhadap pesan atau koneksi baru yang masuk. Pabrik saluran bertanggung jawab untuk membuat saluran di sisi pengiriman untuk memulai komunikasi dengan titik akhir.
Pendengar saluran dan saluran
Pendengar saluran bertanggung jawab untuk membuat saluran dan menerima pesan dari lapisan di bawah atau dari jaringan. Pesan yang diterima dikirim ke lapisan di atas menggunakan saluran yang dibuat oleh pendengar saluran.
Diagram berikut menggambarkan proses penerimaan pesan dan pengirimannya ke lapisan di atasnya.
Pendengar saluran menerima pesan dan mengirimkan ke lapisan di atas melalui saluran.
Proses tersebut dapat dimodelkan secara konseptual sebagai antrean di dalam setiap saluran meskipun penerapannya mungkin tidak benar-benar menggunakan antrean. Pendengar saluran bertanggung jawab untuk menerima pesan dari lapisan di bawah atau jaringan dan memasukkannya ke dalam antrean. Saluran bertanggung jawab untuk mendapatkan pesan dari antrean dan menyerahkannya ke lapisan di atas ketika lapisan tersebut meminta pesan, misalnya dengan memanggil Receive
pada saluran.
WCF menyediakan pembantu kelas dasar untuk proses ini. Untuk diagram kelas pembantu saluran yang dibahas dalam artikel ini, lihat Ringkasan Model Saluran.
Kelas CommunicationObject mengimplementasikan ICommunicationObject dan menerapkan mesin status yang dijelaskan pada langkah 2 dari Mengembangkan Saluran.
Kelas ChannelManagerBase mengimplementasikan CommunicationObject dan menyediakan kelas dasar terpadu untuk ChannelFactoryBase dan ChannelListenerBase. Kelas ChannelManagerBase bekerja bersama dengan ChannelBase, yang merupakan kelas dasar yang mengimplementasikan IChannel.
Kelas ChannelFactoryBase mengimplementasikan ChannelManagerBase dan IChannelFactory dan menggabungkan kelebihan
CreateChannel
menjadi satu metode abstrakOnCreateChannel
.Kelas ChannelListenerBase mengimplementasikan IChannelListener. Kelas ini mengurus manajemen status dasar.
Diskusi berikut didasarkan pada contoh Transportasi: UDP.
Membuat pendengar saluran
UdpChannelListener
yang diterapkan sampel berasal dari kelas ChannelListenerBase. Kelas menggunakan soket UDP tunggal untuk menerima datagram. Metode OnOpen
menerima data menggunakan soket UDP dalam perulangan asinkron. Data tersebut kemudian diubah menjadi pesan menggunakan sistem pengodean pesan:
message = UdpConstants.MessageEncoder.ReadMessage(
new ArraySegment<byte>(buffer, 0, count),
bufferManager
);
Karena saluran datagram yang sama mewakili pesan yang berasal dari sejumlah sumber, UdpChannelListener
adalah pendengar database tunggal. Ada paling banyak satu IChannel aktif yang terkait dengan pendengar ini dalam suatu waktu. Sampel membuat yang lain hanya jika saluran yang dikembalikan dengan metode AcceptChannel selanjutnya dibuang. Ketika pesan diterima, pesan tersebut masuk ke saluran tunggal ini.
UdpInputChannel
Kelas UdpInputChannel
mengimplementasikan IInputChannel. Kelas ini terdiri dari antrean pesan masuk yang diisi oleh soket UdpChannelListener
. Pesan-pesan ini dihapus dari antrean oleh metode Receive.