Ricerca di individuazione e FindCriteriaDiscovery Find and FindCriteria

Un'operazione di ricerca dell'individuazione viene inizializzata da un client per individuare uno o più servizi ed è una delle azioni principali nell'ambito dell'individuazione.A discovery find operation is initiated by a client to discover one or more services and is one of the main actions in discovery. L'esecuzione di una ricerca invia un messaggio WS-Discovery Probe sulla rete.Performing a find sends a WS-Discovery Probe message over the network. I servizi che corrispondono ai criteri specificati inviano una risposta con i messaggi WS-Discovery ProbeMatch.Services that match the criteria specified reply with WS-Discovery ProbeMatch messages. Per ulteriori informazioni sui messaggi di individuazione, vedere la specifica WS-Discovery.For more information about discovery messages, see the WS-Discovery specification.

DiscoveryClientDiscoveryClient

La classe DiscoveryClient fornisce il meccanismo necessario per eseguire operazioni di ricerca e agevola l'esecuzione delle operazioni del client di individuazione.The DiscoveryClient class provides the mechanism to perform find operations and makes performing discovery client operations easy. Contiene un metodo Find che esegue una ricerca sincrona (bloccante) scoperta e un metodo FindAsync che viene inizializzato con una ricerca asincrona non bloccante.It contains a Find method, which performs a (blocking) synchronous find, and a FindAsync method, which initiates a non-blocking asynchronous find. Entrambi i metodi utilizzano un parametro FindCriteria e forniscono risultati all'utente tramite un oggetto FindResponse.Both methods take a FindCriteria parameter, and provide results to the user through a FindResponse object.

FindCriteriaFindCriteria

FindCriteria dispone di varie proprietà, raggruppabili in criteri di ricerca, che specificano i servizi ricercati e cercano criteri di terminazione (durata della ricerca).FindCriteria has several properties, which can be grouped into search criteria, which specify what services you are looking for, and find termination criteria (how long the search should last). Un elemento FindCriteria può contenere più criteri di ricerca.A FindCriteria can contain multiple search criteria. Per impostazione predefinita, il servizio deve individuare corrispondenze per tutti i componenti. In caso contrario, non viene considerato un servizio corrispondente.By default, the service has to match all of the components otherwise it does not consider itself a matching service. Se si desidera cercare servizi che corrispondono solo a determinati criteri, è possibile implementare la logica di ricerca personalizzata nel servizio oppure utilizzare più query.If you want to find services that only match some of the criteria, you can implement custom find logic on the service or you can use multiple queries.

I criteri di ricerca includono:Search criteria include:

  • ContractTypeNameElement - Facoltativo.ContractTypeNameElement - Optional. Nome del contratto del servizio cercato e criteri in genere utilizzati in fase di ricerca di un servizio.The contract name of the service being searched for and the criteria typically used when searching for a service. Se viene specificato più di un nome di contratto, verrà inviata una risposta solo dagli endpoint del servizio corrispondenti a TUTTI i contratti.If more than one contract name is specified, only service endpoints matching ALL contracts reply. Si noti che in WCF un endpoint può supportare un solo contratto.Note that in WCF an endpoint can only support one contract.

  • ScopeElement - Facoltativo.ScopeElement - Optional. Gli ambiti sono URI assoluti utilizzati per suddividere in categorie singoli endpoint servizio.Scopes are absolute URIs that are used to categorize individual service endpoints. Potrebbe risultare opportuno utilizzare questo ambito negli scenari in cui più endpoint espongono lo stesso contratto e si desidera un metodo di ricerca di un subset degli endpoint.You may want to use this in scenarios where multiple endpoints expose the same contract and you want a way to search for a subset of the endpoints. Se viene specificato più di un ambito, verrà inviata una risposta solo dagli endpoint del servizio corrispondenti a TUTTI gli ambiti.If more than one scope is specified, only service endpoints matching ALL scopes reply.

  • ScopeMatchBy - Specifica l'algoritmo di corrispondenza da utilizzare per individuare la corrispondenza tra l'ambito nel messaggio del Probe e quello dell'endpoint.ScopeMatchBy - Specifies the matching algorithm to use while matching the scopes in the Probe message with that of the endpoint. Sono supportate cinque regole di corrispondenza degli ambiti:There are five supported scope-matching rules:

    Se non si specifica una regola di corrispondenza degli ambiti, verrà utilizzato ScopeMatchByPrefix.If a scope-matching rule is not specified, ScopeMatchByPrefix is used.

I criteri di terminazione includono:Termination criteria include:

  1. Duration - Tempo massimo di attesa di risposte dai servizi in una rete.Duration - The maximum time to wait for replies from services on the network. La durata predefinita è 20 secondi.The default duration is 20 seconds.

  2. MaxResults - Numero massimo di risposte da attendere.MaxResults - The maximum number of replies to wait for. Se le risposte MaxResults vengono ricevute prima della scadenza specificata dalla proprietà Duration, l'operazione di ricerca termina.If MaxResults replies are received before Duration has elapsed, the find operation ends.

FindResponseFindResponse

FindResponse dispone di una proprietà della raccolta Endpoints che contiene qualsiasi replica inviata da servizi corrispondenti sulla rete.FindResponse has an Endpoints collection property that contains any replies sent by matching services on the network. Se nessun servizio invia una risposta, la raccolta è vuota.If no services replied, the collection is empty. Se uno o più servizi inviano una risposta, ogni replica viene archiviata in un oggetto EndpointDiscoveryMetadata che contiene l'indirizzo, il contratto e alcune informazioni aggiuntive sul servizio.If one or more services replied, each reply is stored in an EndpointDiscoveryMetadata object, which contains the address, contract, and some additional information about the service.

Nell'esempio seguente viene mostrato come eseguire un'operazione di ricerca nel codice.The following example shows how to perform a find operation in code.

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

Vedere ancheSee Also

Panoramica di WCF DiscoveryWCF Discovery Overview
Utilizzo del canale client di individuazioneUsing the Discovery Client Channel
Individuazione con ambitiDiscovery with Scopes
Ricerca asincronaAsynchronous Find
Funzionalità di baseBasic