Bagikan melalui


Menemukan Find dan FindCriteria

Operasi penemuan find dimulai oleh klien untuk menemukan satu atau beberapa layanan dan merupakan salah satu tindakan utama dalam penemuan. Melakukan operasi find akan mengirim pesan WS-Discovery Probe melalui jaringan. Layanan yang cocok dengan kriteria yang ditentukan membalas dengan pesan WS-Discovery ProbeMatch. Untuk informasi selengkapnya tentang pesan penemuan, lihat spesifikasi WS-Discovery.

DiscoveryClient

Kelas DiscoveryClient menyediakan mekanisme untuk melakukan operasi find dan memudahkan operasi klien penemuan. Ini berisi metode Find, yang melakukan (memblokir) temuan sinkron, dan metode FindAsync, yang memulai penemuan asinkron non-pemblokiran. Kedua metode mengambil parameter FindCriteria, dan memberikan hasil kepada pengguna melalui objek FindResponse.

FindCriteria

FindCriteria memiliki beberapa properti, yang dapat dikelompokkan ke dalam kriteria pencarian, yang menentukan layanan apa yang Anda cari, dan menemukan kriteria penghentian (berapa lama pencarian harus berlangsung). FindCriteria dapat berisi beberapa kriteria pencarian. Secara default, layanan harus cocok dengan semua komponen, jika tidak, layanan tersebut tidak menganggap dirinya sebagai layanan yang cocok. Jika Anda ingin menemukan layanan yang hanya cocok dengan beberapa kriteria, Anda dapat mengimplementasikan logika temukan kustom pada layanan atau Anda bisa menggunakan beberapa kueri.

Kriteria pencarian meliputi:

  • ContractTypeNameElement - Opsional. Nama kontrak layanan yang sedang dicari dan kriteria yang biasanya digunakan saat mencari layanan. Jika lebih dari satu nama kontrak yang ditentukan, hanya titik akhir layanan yang cocok dengan SEMUA kontrak yang akan membalas. Perhatikan bahwa di WCF, titik akhir hanya dapat mendukung satu kontrak.

  • ScopeElement - Opsional. Cakupan adalah URI absolut yang digunakan untuk mengategorikan titik akhir layanan individual. Anda mungkin ingin menggunakan ini dalam skenario di mana beberapa titik akhir mengekspos kontrak yang sama dan Anda ingin cara untuk mencari subset titik akhir. Jika lebih dari satu cakupan ditentukan, hanya titik akhir layanan yang cocok dengan SEMUA balasan cakupan.

  • ScopeMatchBy - Menentukan algoritme pencocokan yang akan digunakan saat mencocokkan cakupan dalam pesan Probe dengan cakupan titik akhir. Ada lima aturan pencocokan cakupan yang didukung:

    Jika aturan pencocokan cakupan tidak ditentukan, ScopeMatchByPrefix akan digunakan.

Kriteria penghentian meliputi:

  1. Duration - Waktu maksimum untuk menunggu balasan dari layanan di jaringan. Durasi defaultnya adalah 20 detik.

  2. MaxResults - Jumlah maksimum balasan yang harus ditunggu. Jika balasan MaxResults diterima sebelum Duration berlalu, operasi temukan berakhir.

FindResponse

FindResponse memiliki properti koleksi Endpoints yang berisi balasan apa pun yang dikirim oleh layanan yang cocok pada jaringan. Jika tidak ada layanan yang membalas, koleksi kosong. Jika satu atau beberapa layanan membalas, setiap balasan disimpan dalam objek EndpointDiscoveryMetadata, yang berisi alamat, kontrak, dan beberapa informasi tambahan tentang layanan.

Contoh berikut menunjukkan cara melakukan operasi temukan dalam kode.

// Create DiscoveryClient
DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());

// Create FindCriteria
FindCriteria findCriteria = new FindCriteria(typeof(IPrinterService));
findCriteria.Scopes.Add(new Uri("http://www.contoso.com/building1/floor1"));
findCriteria.Duration = TimeSpan.FromSeconds(10);

// Find ICalculatorService endpoints
FindResponse findResponse = discoveryClient.Find(findCriteria);

Console.WriteLine("Found {0} ICalculatorService endpoint(s).", findResponse.Endpoints.Count)

Lihat juga