Udostępnij za pośrednictwem


Odnajdywanie — znajdowanie i kryteria znajdowania

Operacja odnajdywania jest inicjowana przez klienta w celu odnalezienia co najmniej jednej usługi i jest jedną z głównych akcji odnajdywania. Wykonanie operacji znajdowania wysyła komunikat sondy odnajdywania WS za pośrednictwem sieci. Usługi spełniające określone kryteria odpowiedzi z komunikatami WS-Discovery ProbeMatch. Aby uzyskać więcej informacji na temat komunikatów odnajdywania, zobacz specyfikację odnajdywania WS-Discovery.

Discoveryclient

Klasa DiscoveryClient udostępnia mechanizm do wykonywania operacji znajdowania i ułatwia wykonywanie operacji klienta odnajdywania. Zawiera ona metodę Find , która wykonuje (blokujące) synchroniczne wyszukiwanie i metodę FindAsync , która inicjuje nieblokacyjne wyszukiwanie asynchroniczne. Obie metody przyjmują FindCriteria parametr i udostępniają użytkownikowi wyniki za pośrednictwem FindResponse obiektu.

Findcriteria

FindCriteria ma kilka właściwości, które można zgrupować w kryteria wyszukiwania, które określają, jakie usługi szukasz, i znaleźć kryteria zakończenia (jak długo wyszukiwanie powinno trwać). Element FindCriteria może zawierać wiele kryteriów wyszukiwania. Domyślnie usługa musi być zgodna ze wszystkimi składnikami. W przeciwnym razie nie bierze pod uwagę pasującej usługi. Jeśli chcesz znaleźć usługi spełniające tylko niektóre kryteria, możesz zaimplementować niestandardową logikę znajdowania w usłudze lub użyć wielu zapytań.

Kryteria wyszukiwania obejmują:

  • ContractTypeNameElement -Opcjonalne. Nazwa kontraktu wyszukiwanej usługi i kryteria zwykle używane podczas wyszukiwania usługi. Jeśli zostanie określona więcej niż jedna nazwa kontraktu, tylko punkty końcowe usługi pasujące do odpowiedzi WSZYSTKIE kontrakty. Należy pamiętać, że w programie WCF punkt końcowy może obsługiwać tylko jedną umowę.

  • ScopeElement -Opcjonalne. Zakresy to bezwzględne identyfikatory URI używane do kategoryzowania poszczególnych punktów końcowych usługi. Można to użyć w scenariuszach, w których wiele punktów końcowych uwidacznia ten sam kontrakt i chcesz wyszukać podzbiór punktów końcowych. Jeśli określono więcej niż jeden zakres, tylko punkty końcowe usługi pasujące do odpowiedzi WSZYSTKIE zakresy.

  • ScopeMatchBy - Określa pasujący algorytm do użycia podczas dopasowywania zakresów w komunikacie sondowania z punktem końcowym. Istnieje pięć obsługiwanych reguł dopasowywania zakresu:

    Jeśli nie określono reguły dopasowania zakresu, ScopeMatchByPrefix zostanie użyta.

Kryteria zakończenia obejmują:

  1. Duration — Maksymalny czas oczekiwania na odpowiedzi z usług w sieci. Domyślny czas trwania to 20 sekund.

  2. MaxResults - Maksymalna liczba odpowiedzi do oczekiwania. Jeśli MaxResults odpowiedzi zostaną odebrane przed upływem Duration , operacja find kończy się.

FindResponse

FindResponse ma właściwość kolekcji zawierającą Endpoints odpowiedzi wysyłane przez pasujące usługi w sieci. Jeśli żadna usługa nie odpowiedziała, kolekcja jest pusta. Jeśli co najmniej jedna usługa odpowiedziała, każda odpowiedź jest przechowywana w EndpointDiscoveryMetadata obiekcie zawierającym adres, kontrakt i dodatkowe informacje o usłudze.

W poniższym przykładzie pokazano, jak wykonać operację znajdowania w kodzie.

// 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)

Zobacz też