Criteri di ricerca personalizzatiCustom Find Criteria

In questo esempio viene illustrato come creare una corrispondenza degli ambiti personalizzata utilizzando la logica e come implementare un servizio di individuazione personalizzato.This sample demonstrates how to create a custom scope match using logic and how to implement a custom discovery service. I client utilizzano la funzionalità di corrispondenza degli ambiti personalizzata per rifinire ed eseguire l'ulteriore compilazione sulla funzionalità di individuazione fornita dal sistema di WCF Discovery.Clients use custom scope matching functionality to refine and further build on top of the system-provided find functionality of WCF Discovery. Lo scenario analizzato in questo esempio è il seguente:The scenario this sample covers is as follows:

  1. Un client esegue la ricerca di un servizio calcolatrice.A client is looking for a calculator service.

  2. Per rifinirne la ricerca, il client deve utilizzare una regola per la corrispondenza degli ambiti personalizzata.To refine its search, the client must use a custom scope matching rule.

  3. In base a questa regola, un servizio risponde al client se il relativo endpoint corrisponde a uno qualsiasi degli ambiti specificati dal client.According to this rule, a service responds back to the client if its endpoint matches any of the scopes specified by the client.

DimostrazioneDemonstrates

  • Creazione di un servizio di individuazione personalizzato.Creating a custom discovery service.

  • Implementazione di una corrispondenza degli ambiti personalizzata mediante un algoritmo.Implementing a custom scope match by algorithm.

DiscussioneDiscussion

Il client esegue la ricerca di tipo "OR" criteri di corrispondenza.The client is looking for "OR" type matching criteria. Un servizio risponde se gli ambiti sui relativi endpoint corrispondono a uno qualsiasi degli ambiti forniti dal client.A service responds back if the scopes on its endpoints match any of the scopes provided by the client. In questo caso, il client esegue la ricerca di un servizio calcolatrice che dispone di uno qualsiasi degli ambiti riportati nell'elenco seguente:In this case, the client is looking for a calculator service that has any of the scopes in the following list:

  1. net.tcp://Microsoft.Samples.Discovery/RedmondLocation

  2. net.tcp://Microsoft.Samples.Discovery/SeattleLocation

  3. net.tcp://Microsoft.Samples.Discovery/PortlandLocation

A tale scopo, il client indica ai servizi di utilizzare una regola per la corrispondenza degli ambiti personalizzata passando una corrispondenza degli ambiti personalizzata tramite URI.To accomplish this, the client directs services to use a custom scope matching rule by passing in a custom scope match by URI. Per facilitare la corrispondenza degli ambiti personalizzata, il servizio deve utilizzare un servizio di individuazione personalizzato in grado di comprendere la regola per la corrispondenza degli ambiti personalizzata e di implementare la logica corrispondente associata.To facilitate the custom scope matching, the service must use a custom discovery service that understands the custom scope match rule and implements the associated matching logic.

Nel progetto client aprire il file Program.cs.In the client project, open the Program.cs file. Si noti che il campo ScopeMatchBy dell'oggetto FindCriteria è impostato su un URI specifico.Note that the ScopeMatchBy field of the FindCriteria object is set to a specific URI. Questo identificatore viene inviato al servizio.This identifier is sent to the service. Se il servizio non è in grado di comprendere questa regola, la richiesta di ricerca del client verrà ignorata.If the service does not understand this rule, it ignores the client’s find request.

Aprire il progetto del servizio.Open the service project. Per implementare il servizio di individuazione personalizzato vengono utilizzati i tre file seguenti:Three files are used to implement the Custom Discovery Service:

  1. AsyncResult.cs: si tratta dell'implementazione del AsyncResult che è richiesta dai metodi di individuazione.AsyncResult.cs: This is the implementation of the AsyncResult that is required by Discovery methods.

  2. CustomDiscoveryService.cs: questo file implementa il servizio di individuazione personalizzato.CustomDiscoveryService.cs: This file implements the custom discovery service. L'implementazione estende la classe DiscoveryService ed esegue l'override dei metodi necessari.The implementation extends the DiscoveryService class and overrides the necessary methods. Si noti l'implementazione del metodo OnBeginFind.Note the implementation of the OnBeginFind method. Il metodo esegue un controllo per determinare se la corrispondenza degli ambiti personalizzata definita da una regola è stata specificata dal client.The method checks to see whether the custom scope match by rule was specified by the client. Si tratta dello stesso URI personalizzato specificato dal client in precedenza.This is the same custom URI that the client specified previously. Se la regola personalizzata viene specificata, verrà seguito il percorso di codice che implementa la logica di corrispondenza "OR".If the custom rule is specified, the code path that implements the "OR" match logic is followed.

    Questa logica personalizzata passa attraverso tutti gli ambiti in ognuno degli endpoint di cui dispone il servizio.This custom logic goes through all of the scopes on each of the endpoints that the service has. Se uno degli ambiti dell'endpoint corrisponde a uno qualsiasi degli ambiti forniti dal client, il servizio di individuazione aggiungerà tale endpoint alla risposta restituita al client.If any of the endpoint's scopes match any of the scopes provided by the client, the discovery service adds that endpoint to the response that is sent back to the client.

  3. CustomDiscoveryExtension.cs: l'ultimo passaggio nell'implementazione del servizio di individuazione consiste nel connettere questa implementazione personalizzato Individuazione servizio all'host del servizio.CustomDiscoveryExtension.cs: The last step in implementing the discovery service is to connect this implementation of the custom discover service to the service host. La classe di supporto utilizzata in questo caso è CustomDiscoveryExtension.The helper class used here is the CustomDiscoveryExtension class. Questa classe estende la classe DiscoveryServiceExtension.This class extends the DiscoveryServiceExtension class. È necessario che l'utente esegua l'override del metodo GetDiscoveryService.The user must override the GetDiscoveryService method. In questo caso, il metodo restituisce un'istanza del servizio di individuazione personalizzato creato in precedenza.In this case, the method returns an instance of the custom discovery service that was created before. PublishedEndpoints è un oggetto ReadOnlyCollection<T> che contiene tutti gli endpoint dell'applicazione che vengono aggiunti a ServiceHost.PublishedEndpoints is a ReadOnlyCollection<T> that contains all of the application endpoints that are added to the ServiceHost. Il servizio di individuazione personalizzato utilizza questo oggetto per popolare l'elenco interno.The custom discovery service uses this to populate its internal list. Un utente ha la possibilità di aggiungere altri metadati dell'endpoint.A user can to add other endpoint metadata as well.

Aprire infine Program.cs.Lastly, open Program.cs. Si noti che ServiceDiscoveryBehavior e CustomDiscoveryExtension vengono entrambi aggiunti all'host.Note that both the ServiceDiscoveryBehavior and CustomDiscoveryExtension are added to the host. Dopo avere eseguito questa operazione e aver fatto in modo che l'host disponga di un endpoint sul quale ricevere messaggi di individuazione, l'applicazione potrà utilizzare il servizio di individuazione personalizzato.Once this is done and the host has an endpoint over which to receive discovery messages, the application can use the custom discovery service.

Si osservi che il client è in grado di trovare il servizio senza conoscerne l'indirizzo.Observe that the client is able to find the service without knowing its address.

Per impostare, compilare ed eseguire l'esempioTo set up, build, and run the sample

  1. Aprire la soluzione contenente il progetto.Open the solution that contains the project.

  2. Compilare il progetto.Build the project.

  3. Eseguire l'applicazione del servizio.Run the service application.

  4. Eseguire l'applicazione client.Run the client application.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your machine. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Discovery\CustomFindCriteria