Partager via


Custom Find Criteria

L’exemple CustomFindCriteriamontre comment créer une correspondance de portée personnalisée à l'aide de la logique et comment implémenter un service de découverte personnalisé. Les clients utilisent la fonctionnalité de correspondance de portée personnalisée pour affiner et mieux tirer parti de la fonctionnalité de recherche système de la découverte WCF. Le scénario couvert par cet exemple est le suivant :

  1. Un client recherche un service de calculatrice.

  2. Pour affiner sa recherche, le client doit utiliser une règle de correspondance de portée personnalisée.

  3. D'après cette règle, un service répond au client si son point de terminaison correspond à l'une quelconque des portées spécifiées par le client.

Illustre le

  • Création d'un service de découverte personnalisé

  • Implémentation d'une correspondance de portée personnalisée par algorithme

Discussion

Le client recherche des critères de correspondance de type « OU ». Un service répond si les portées de ses points de terminaison correspondent à l'une des portées fournies par le client. Dans ce cas, le client recherche un service de calculatrice dont la portée figure dans la liste suivante :

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

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

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

Pour cela, le client indique aux services d'utiliser une règle de correspondance de portée personnalisée en passant une correspondance de portée personnalisée par URI. Pour faciliter la mise en correspondance de portée personnalisée, le service doit utiliser un service de découverte personnalisé qui comprend la règle de correspondance de portée personnalisée et implémente la logique associée.

Dans le projet client, ouvrez le fichier Program.cs. Notez que le champ ScopeMatchBy de l'objet FindCriteria a pour valeur un URI spécifique. Cet identificateur est envoyé au service. Si le service ne comprend pas cette règle, il ignore la requête de recherche du client.

Ouvrez le projet de service. L'implémentation du service de découverte personnalisé utilise trois fichiers :

  1. AsyncResult.cs : implémentation du AsyncResult requis par les méthodes Discovery.

  2. CustomDiscoveryService.cs : ce fichier implémente le service de découverte personnalisé. L'implémentation étend la classe DiscoveryService et substitue les méthodes nécessaires. Notez l'implémentation de la méthode OnBeginFind. Cette méthode vérifie si la règle de correspondance de portée personnalisée a été spécifiée par le client. Il s'agit de l'URI personnalisé que le client a spécifié précédemment. Si la règle personnalisée est spécifiée, le chemin de code qui implémente la logique de correspondance « OU » est suivi.

    Cette logique personnalisée parcourt toutes les portées sur chacun des points de terminaison dont le service dispose. Si l'une des portées du point de terminaison correspond à l'une des portées fournies par le client, le service de découverte ajoute ce point de terminaison à la réponse renvoyée au client.

  3. CustomDiscoveryExtension.cs : la dernière étape pour implémenter le service de découverte consiste à connecter cette implémentation du service de découverte personnalisé à l'hôte de service. La classe d'assistance utilisée ici est la classe CustomDiscoveryExtension. Cette classe étend la classe DiscoveryServiceExtension. L'utilisateur doit substituer la méthode GetDiscoveryService. Dans ce cas, la méthode retourne une instance du service de découverte personnalisé créé auparavant. PublishedEndpoints est un ReadOnlyCollection<T> qui contient tous les points de terminaison d'application qui sont ajoutés à ServiceHost. Le service de découverte personnalisé l'utilise pour remplir sa liste interne. Un utilisateur peut aussi ajouter d'autres métadonnées de points de terminaison.

Enfin, ouvrez Program.cs. Notez que ServiceDiscoveryBehavior et CustomDiscoveryExtension sont tous deux ajoutés à l'hôte. Lorsque cette opération a été effectuée et que l'hôte dispose d'un point de terminaison sur lequel recevoir des messages de découverte, l'application peut utiliser le service de découverte personnalisé.

Observez que le client peut trouver le service sans connaître son adresse.

Pour configurer, générer et exécuter l'exemple

  1. Ouvrez la solution qui contient le projet.

  2. Créez le projet.

  3. Exécutez l'application de service.

  4. Exécuter l’application cliente.