Bagikan melalui


Menggunakan Saluran Klien Penemuan

Saat menulis aplikasi klien WCF, Anda perlu mengetahui alamat titik akhir layanan yang Anda panggil. Dalam banyak situasi, alamat titik akhir layanan tidak diketahui sebelumnya atau alamat layanan berubah seiring waktu. Saluran Klien Penemuan memungkinkan Anda menulis aplikasi klien WCF, menjelaskan layanan yang ingin Anda panggil, dan saluran klien secara otomatis mengirim permintaan pemeriksaan. Ketika layanan merespons, saluran klien penemuan mengambil alamat titik akhir untuk layanan dari respons pemeriksaan dan menggunakannya untuk memanggil layanan.

Menggunakan Saluran Klien Penemuan

Untuk menggunakan Saluran Klien Penemuan, tambahkan instans DiscoveryClientBindingElement ke tumpukan saluran klien Anda. Atau, Anda dapat menggunakan DynamicEndpoint dan DiscoveryClientBindingElement yang secara otomatis ditambahkan ke pengikatan Anda jika belum ada.

Perhatian

Disarankan agar DiscoveryClientBindingElement adalah elemen paling atas di tumpukan saluran klien Anda. Setiap elemen pengikatan yang ditambahkan di atas DiscoveryClientBindingElement harus memastikan bahwa ChannelFactory atau saluran yang dibuatnya tidak menggunakan alamat titik akhir atau alamat Via (diteruskan ke metode CreateChannel) karena mungkin tidak berisi alamat yang benar.

Kelas DiscoveryClientBindingElement berisi dua properti publik:

  1. FindCriteria, yang digunakan untuk menjelaskan layanan yang ingin Anda panggil.

  2. DiscoveryEndpointProvider yang menentukan titik akhir penemuan untuk mengirim pesan penemuan.

Properti FindCriteria memungkinkan Anda menentukan kontrak layanan yang Anda cari, URI cakupan yang diperlukan, dan jumlah waktu maksimum untuk mencoba membuka saluran. Jenis kontrak ditentukan dengan memanggil konstruktor FindCriteria. URI cakupan dapat ditambahkan ke properti Scopes. Properti MaxResults memungkinkan Anda menentukan jumlah hasil maksimum yang ingin disambungkan oleh klien. Ketika respons pemeriksaan diterima, klien mencoba membuka saluran menggunakan alamat titik akhir dari respons pemeriksaan. Jika pengecualian terjadi, klien melanjutkan ke respons pemeriksaan berikutnya, menunggu lebih banyak respons untuk diterima jika perlu. Hal ini terus dilakukan sampai saluran berhasil dibuka atau jumlah hasil maksimum tercapai. Untuk informasi selengkapnya tentang pengaturan ini, lihat FindCriteria.

Properti DiscoveryEndpointProvider memungkinkan Anda menentukan titik akhir penemuan yang akan digunakan. Biasanya ini adalah UdpDiscoveryEndpoint, tetapi bisa berupa titik akhir yang valid.

Ketika Anda membuat pengikatan yang akan digunakan untuk berkomunikasi dengan layanan, Anda harus berhati-hati untuk menggunakan pengikatan yang sama persis dengan layanan. Satu-satunya perbedaan adalah pengikatan klien memiliki DiscoveryClientBindingElement di bagian atas tumpukan. Jika layanan menggunakan salah satu pengikatan yang disediakan sistem, buat CustomBinding baru dan teruskan pengikatan yang disediakan sistem ke konstruktor CustomBinding. Kemudian, Anda dapat menambahkan DiscoveryClientBindingElement dengan memanggil Insert di properti Elements.

Setelah menambahkan DiscoveryClientBindingElement ke pengikatan dan mengonfigurasinya, Anda dapat membuat instans kelas klien WCF, membukanya, dan memanggil metodenya. Contoh berikut menggunakan Saluran Klien Penemuan untuk menemukan layanan WCF yang mengimplementasikan kelas ICalculator (digunakan dalam tutorial Memulai WCF) dan memanggil metode Add.

// Create the DiscoveryClientBindingElement  
DiscoveryClientBindingElement bindingElement = new DiscoveryClientBindingElement();  
// Search for a service that implements the ICalculator interface, attempting to open  
// the channel a maximum of 2 times  
bindingElement.FindCriteria = new FindCriteria(typeof(ICalculator)) { MaxResults = 2 };  
// Use the UdpDiscoveryEndpoint  
bindingElement.DiscoveryEndpoint = new UdpDiscoveryEndpoint();  
  
// The service uses the BasicHttpBinding, so use that and insert the DiscoveryClientBindingElement at the
// top of the stack  
CustomBinding binding = new CustomBinding(new BasicHttpBinding());  
binding.Elements.Insert(0,bindingElement);  
  
try  
{  
    // Create the WCF client and call a method  
    CalculatorClient client = new CalculatorClient(binding, new EndpointAddress("http://schemas.microsoft.com/dynamic"));  
    client.Open();  
    client.Add(1, 1);  
}  
catch (EndpointNotFoundException ex)  
{  
    Console.WriteLine("An exception occurred: " + ex.Message);  
}  

Keamanan dan Saluran Klien Penemuan

Saat menggunakan saluran klien penemuan, dua titik akhir ditentukan. Satu digunakan untuk pesan penemuan, biasanya UdpDiscoveryEndpoint, dan yang lainnya adalah titik akhir aplikasi. Saat mengimplementasikan layanan yang aman, kita harus berhati-hati untuk mengamankan kedua titik akhir. Untuk informasi selengkapnya tentang keamanan, lihat Mengamankan Layanan dan Klien.