Sdílet prostřednictvím


Hledání zjišťování a kritéria hledání

Operace hledání zjišťování je inicializována klientem ke zjišťování jedné nebo více služeb a je jednou z hlavních akcí při zjišťování. Při hledání se odešle zpráva sondy WS-Discovery přes síť. Služby, které odpovídají zadaným kritériím odpovědi se zprávami WS-Discovery ProbeMatch. Další informace o zprávách zjišťování naleznete ve specifikaci WS-Discovery.

DiscoveryClient

Třída DiscoveryClient poskytuje mechanismus pro provádění operací hledání a usnadňuje provádění operací klienta zjišťování. Obsahuje metodu Find , která provádí synchronní hledání (blokující) a metodu FindAsync , která iniciuje neblokující asynchronní hledání. Obě metody přebírají FindCriteria parametr a poskytují uživateli výsledky prostřednictvím objektu FindResponse .

FindCriteria

FindCriteria má několik vlastností, které lze seskupit do kritérií hledání, které určují, jaké služby hledáte, a najít kritéria ukončení (jak dlouho má hledání trvat). A FindCriteria může obsahovat více kritérií hledání. Ve výchozím nastavení musí služba odpovídat všem komponentám, jinak se nepovažuje za odpovídající službu. Pokud chcete najít služby, které vyhovují pouze některým kritériím, můžete ve službě implementovat vlastní logiku hledání nebo můžete použít více dotazů.

Kritéria hledání zahrnují:

  • ContractTypeNameElement -Volitelné. Název kontraktu služby, kterou hledáte, a kritéria se obvykle používají při hledání služby. Pokud je zadáno více než jeden název kontraktu, odpoví pouze koncové body služby odpovídající všem kontraktům. Všimněte si, že koncový bod WCF může podporovat pouze jeden kontrakt.

  • ScopeElement -Volitelné. Obory jsou absolutní identifikátory URI, které se používají ke kategorizaci jednotlivých koncových bodů služby. Můžete ho použít ve scénářích, kdy více koncových bodů zveřejňuje stejný kontrakt a chcete najít podmnožinu koncových bodů. Pokud je zadáno více než jeden obor, odpovídají pouze koncové body služby odpovídající všem oborům.

  • ScopeMatchBy – Určuje odpovídající algoritmus, který se má použít při porovnávání oborů ve zprávě sondy s oborem koncového bodu. Existuje pět podporovaných pravidel párování oborů:

    Pokud není zadané pravidlo párování oboru, ScopeMatchByPrefix použije se.

Mezi kritéria ukončení patří:

  1. Duration – Maximální doba čekání na odpovědi ze služeb v síti. Výchozí doba trvání je 20 sekund.

  2. MaxResults - Maximální počet odpovědí, na které se má čekat. Pokud MaxResults jsou odpovědi přijaty dříve Duration , než uplynuly, operace hledání skončí.

FindResponse

FindResponseEndpoints má vlastnost kolekce, která obsahuje všechny odpovědi odeslané odpovídajícími službami v síti. Pokud neodpovědnou žádné služby, kolekce je prázdná. Pokud jedna nebo více služeb odpoví, každá odpověď se uloží do EndpointDiscoveryMetadata objektu, který obsahuje adresu, smlouvu a další informace o službě.

Následující příklad ukazuje, jak provést operaci hledání v kódu.

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

Viz také