Exemple Discovery with Scopes
L’exemple DiscoveryWithScopes montre comment utiliser des portées pour catégoriser des points de terminaison détectables et comment utiliser DiscoveryClient pour rechercher des points de terminaison de façon asynchrone. Sur le service, cet exemple montre comment personnaliser la découverte pour chaque point de terminaison en ajoutant un comportement de découverte du point de terminaison, et en l’utilisant pour ajouter une portée au point de terminaison et contrôler la fonctionnalité de découverte du point de terminaison. Sur le client, l'exemple passe en revue la façon dont les clients peuvent créer un DiscoveryClient et ajuster les paramètres de recherche de manière à inclure des portées en les ajoutant à FindCriteria. Cet exemple montre comment les clients peuvent limiter les réponses en ajoutant un critère d'arrêt.
Fonctionnalités du service
Ce projet présente deux points de terminaison de service qui sont ajoutés à un ServiceHost. Un EndpointDiscoveryBehavior est associé à chaque point de terminaison. Ce comportement est utilisé pour ajouter des portées d'URI pour les deux points de terminaison. Les portées permettent de distinguer chacun de ces points de terminaison afin que les clients puissent affiner la recherche. Pour le deuxième point de terminaison, la fonctionnalité de découverte peut être désactivée en affectant à la propriété Enabled la valeur false
. De cette façon, les métadonnées de découverte associées à ce point de terminaison ne seront pas envoyées dans le cadre d'un message de découverte.
Fonctionnalités du client
La méthode FindCalculatorServiceAddress()
montre comment utiliser un DiscoveryClient et lui passer un FindCriteria avec deux restrictions. Une portée est ajoutée aux critères et la propriété MaxResults prend la valeur 1. La portée limite les résultats aux seuls services qui publient la même portée. Affecter 1 à MaxResults limite les réponses que le DiscoveryClient attend à un point de terminaison au maximum. L’appel à Find est une opération synchrone qui bloque le thread jusqu’à ce qu’un délai d’attente soit atteint ou qu’un point de terminaison soit trouvé.
Pour utiliser cet exemple
Cet exemple utilise des points de terminaison HTTP et pour exécuter cet exemple, des listes de contrôle d'accès (ACL) d'URL appropriées doivent être ajoutées. Pour plus d’informations, consultez Configuration de HTTP et HTTPS. L'exécution de la commande suivante avec un privilège élevé doit ajouter les ACL appropriées. Vous pouvez substituer vos domaine et nom d'utilisateur aux arguments suivants si la commande ne fonctionne pas telle quelle :
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
Générez la solution.
Exécutez le fichier exécutable du service à partir du répertoire de build.
Exécutez le fichier exécutable du client. Notez que le client est en mesure de trouver le service.