Bagikan melalui


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.

Channel listeners and channels

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.

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.