Dela via


Identifieringssökning och FindCriteria

En identifieringssökningsåtgärd initieras av en klient för att identifiera en eller flera tjänster och är en av de viktigaste åtgärderna i identifieringen. När du utför en sökning skickas ett WS-Discovery-avsökningsmeddelande över nätverket. Tjänster som matchar det angivna villkoret svarar med WS-Discovery ProbeMatch-meddelanden. Mer information om identifieringsmeddelanden finns i WS-Discovery-specifikationen.

DiscoveryClient

Klassen DiscoveryClient tillhandahåller mekanismen för att utföra sökåtgärder och gör det enkelt att utföra identifieringsklientåtgärder. Den innehåller en Find metod som utför en (blockerande) synkron sökning och en FindAsync metod som initierar en icke-blockerande asynkron sökning. Båda metoderna tar en FindCriteria parameter och ger användaren resultat via ett FindResponse objekt.

FindCriteria

FindCriteria har flera egenskaper, som kan grupperas i sökvillkor, som anger vilka tjänster du letar efter och hittar villkor för avslutning (hur länge sökningen ska pågå). En FindCriteria kan innehålla flera sökvillkor. Som standard måste tjänsten matcha alla komponenter, annars ser den inte sig själv som en matchande tjänst. Om du vill hitta tjänster som bara matchar vissa av kriterierna kan du implementera anpassad söklogik i tjänsten eller använda flera frågor.

Sökvillkor omfattar:

  • ContractTypeNameElement -Valfri. Kontraktsnamnet för den tjänst som söks efter och de kriterier som vanligtvis används vid sökning efter en tjänst. Om fler än ett kontraktnamn har angetts svarar endast tjänstslutpunkter som matchar ALLA kontrakt. Observera att i WCF kan en slutpunkt endast stödja ett kontrakt.

  • ScopeElement -Valfri. Omfång är absoluta URI:er som används för att kategorisera enskilda tjänstslutpunkter. Du kanske vill använda detta i scenarier där flera slutpunkter exponerar samma kontrakt och du vill ha ett sätt att söka efter en delmängd av slutpunkterna. Om mer än ett omfång har angetts svarar endast tjänstslutpunkter som matchar ALLA omfång.

  • ScopeMatchBy – Anger den matchande algoritm som ska användas när omfången i avsökningsmeddelandet matchas med slutpunktens. Det finns fem omfångsmatchningsregler som stöds:

    Om en regel för omfångsmatchning inte har angetts ScopeMatchByPrefix används.

Avslutningskriterierna omfattar:

  1. Duration – Den maximala tiden att vänta på svar från tjänster i nätverket. Standardvaraktigheten är 20 sekunder.

  2. MaxResults - Det maximala antalet svar att vänta på. Om MaxResults svar tas emot innan Duration har förflutit avslutas sökåtgärden.

FindResponse

FindResponse har en Endpoints samlingsegenskap som innehåller svar som skickas av matchande tjänster i nätverket. Om inga tjänster svarade är samlingen tom. Om en eller flera tjänster svarade lagras varje svar i ett EndpointDiscoveryMetadata objekt som innehåller adressen, kontraktet och ytterligare information om tjänsten.

I följande exempel visas hur du utför en sökningsåtgärd i kod.

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

Se även