Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
L’exemple de configuration illustre l’utilisation d’un fichier de configuration pour rendre un service détectable.
Configuration du service
Le fichier de configuration de cet exemple illustre deux fonctionnalités :
Rendre le service accessible via une norme standard UdpDiscoveryEndpoint.
Ajustement des informations relatives à la découverte pour le point de terminaison d’application du service et ajustement de certains paramètres liés à la découverte sur le point de terminaison standard.
Pour activer la découverte, quelques modifications doivent être apportées dans le fichier de configuration de l’application pour le service :
Un point de terminaison de découverte doit être ajouté à l’élément
<service>. Il s’agit d’un point de terminaison standard UdpDiscoveryEndpoint . Ce point de terminaison système est associé au service de découverte par le runtime. Le service de découverte écoute les messages sur ce point de terminaison.Un
<serviceDiscovery>comportement est ajouté à la<serviceBehaviors>section. Cela permet au service d’être découvert au moment de l’exécution et utilise le point de terminaison de découverte mentionné précédemment pour écouter les messages de découverte :ProbeetResolve. Avec ces deux ajouts, le service est détectable sur le point de terminaison de découverte spécifié.
L’extrait de code de configuration suivant montre un service avec un point de terminaison d’application et un point de terminaison de découverte défini :
<services>
<service name="Microsoft.Samples.Discovery.CalculatorService"
behaviorConfiguration="calculatorServiceBehavior">
<endpoint address=""
binding="wsHttpBinding"
contract="Microsoft.Samples.Discovery.ICalculatorService"
behaviorConfiguration="endpointBehaviorConfiguration" />
<endpoint name="udpDiscovery"
kind="udpDiscoveryEndpoint"
endpointConfiguration="adhocDiscoveryEndpointConfiguration"/> </service>
</services>
Pour tirer parti des annonces, vous devez ajouter un point de terminaison d'annonce. Pour ce faire, modifiez le fichier de configuration comme indiqué dans le code suivant.
<serviceDiscovery>
<announcementEndpoints>
<endpoint kind="udpAnnouncementEndpoint"/>
</announcementEndpoints>
</serviceDiscovery>
L'ajout d'un point de terminaison d'annonce au comportement du service de découverte crée un client d'annonce par défaut pour le service. Cela garantit que le service envoie une annonce en ligne et hors connexion lorsque le service est ouvert et fermé respectivement.
Ce fichier de configuration va au-delà de ces étapes simples en modifiant des comportements supplémentaires. Il est possible de contrôler les informations liées à la découverte à l’aide de points de terminaison spécifiques. Autrement dit, un utilisateur peut contrôler si un point de terminaison peut être découvert et que l’utilisateur peut également marquer ce point de terminaison avec Scopes des métadonnées XML personnalisées. Pour ce faire, l’utilisateur doit ajouter une behaviorConfiguration propriété au point de terminaison de l’application. Dans ce cas, la propriété suivante est ajoutée au point de terminaison de l’application.
behaviorConfiguration="endpointBehaviorConfiguration"
À présent, par le biais de l’élément de configuration de comportement, vous pouvez contrôler les attributs liés à la découverte. Dans ce cas, deux étendues sont ajoutées au point de terminaison de l’application.
<endpointBehaviors>
<behavior name="endpointBehaviorConfiguration">
<endpointDiscovery>
<scopes>
<add scope="http://www.example.com/calculator"/>
<add scope="ldap:///ou=engineering,o=examplecom,c=us"/>
</scopes>
</endpointDiscovery>
</behavior>
</endpointBehaviors>
Pour plus d’informations sur les étendues, consultez Discovery Find et FindCriteria.
Vous pouvez également contrôler des détails spécifiques du point de terminaison de découverte. C’est fait par le biais du StandardEndpointsSection. Dans cet exemple, la version du protocole utilisé est modifiée, ainsi que l’ajout d’un maxResponseDelay attribut, comme illustré dans l’exemple de code suivant.
<standardEndpoints>
<udpDiscoveryEndpoint>
<standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" maxResponseDelay="00:00:00.600" />
</udpDiscoveryEndpoint>
</standardEndpoints>
Voici le fichier de configuration complet utilisé dans cet exemple :
<configuration>
<system.serviceModel>
<services>
<service name="Microsoft.Samples.Discovery.CalculatorService"
behaviorConfiguration="calculatorServiceBehavior">
<endpoint address=""
binding="wsHttpBinding"
contract="Microsoft.Samples.Discovery.ICalculatorService"
behaviorConfiguration="endpointBehaviorConfiguration" />
<!-- Define the discovery endpoint -->
<endpoint name="udpDiscovery" kind="udpDiscoveryEndpoint" endpointConfiguration="adhocDiscoveryEndpointConfiguration"/> </service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="calculatorServiceBehavior">
<!-- Add an announcement endpoint -->
<serviceDiscovery>
<announcementEndpoints>
<endpoint kind="udpAnnouncementEndpoint"/>
</announcementEndpoints>
</serviceDiscovery>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="endpointBehaviorConfiguration">
<!-- Add scopes used to identify the service -->
<endpointDiscovery>
<scopes>
<add scope="http://www.example.com/calculator"/>
<add scope="ldap:///ou=engineering,o=examplecom,c=us"/>
</scopes>
</endpointDiscovery>
</behavior>
</endpointBehaviors>
</behaviors>
<standardEndpoints>
<udpDiscoveryEndpoint>
<!-- Configure the UDP discovery endpoint -->
<standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" maxResponseDelay="00:00:00.600" />
</udpDiscoveryEndpoint>
</standardEndpoints>
</system.serviceModel>
</configuration>
Configuration du client
Le fichier de configuration de l'application pour le client utilise un standardEndpoint de type dynamicEndpoint afin d'utiliser la découverte, comme indiqué dans l'extrait de configuration suivant.
<client>
<!-- Create an endpoint, make kind="dynamicEndpoint" and use the endpointConfiguration to change settings of DynamicEndpoint -->
<endpoint name="calculatorEndpoint"
binding="wsHttpBinding"
contract="ICalculatorService"
kind ="dynamicEndpoint"
endpointConfiguration="dynamicEndpointConfiguration">
</endpoint>
</client>
Lorsqu’un client utilise un dynamicEndpoint, le runtime effectue automatiquement la découverte. Différents paramètres sont utilisés lors de la découverte, tels que ceux définis dans la discoveryClientSettings section, qui spécifie le type de point de terminaison de découverte à utiliser :
<endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="adhocDiscoveryEndpointConfiguration" />
Critères de recherche utilisés pour rechercher des services :
<!-- Add Scopes, ScopeMatchBy, Extensions and termination criteria in FindCriteria -->
<findCriteria scopeMatchBy="http://schemas.microsoft.com/ws/2008/06/discovery/rfc" duration="00:00:10" maxResults="1">
<scopes>
<add scope="http://www.microsoft.com/building42/floor1"/>
</scopes>
<!-- These extensions are sent from the client to the service as part of the probe message -->
<extensions>
<CustomMetadata>This is custom metadata that is sent to the service along with the client's find request.</CustomMetadata>
</extensions>
</findCriteria>
Cet exemple étend cette fonctionnalité et modifie le FindCriteria utilisé par le client, ainsi que certaines propriétés du standard updDiscoveryEndpoint utilisé pour la découverte. Les FindCriteria sont modifiés pour utiliser une portée et un algorithme scopeMatchBy spécifique, ainsi que des critères d’arrêt personnalisés. En outre, l’exemple montre également comment un client peut envoyer des éléments XML à l’aide Probe de messages. Enfin, certaines modifications sont apportées à la UdpDiscoveryEndpointversion du protocole utilisé et des paramètres spécifiques au protocole UDP, comme indiqué dans le fichier de configuration suivant.
<udpDiscoveryEndpoint>
<!-- Specify the discovery protocol version and UDP transport settings. -->
<standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11">
<transportSettings duplicateMessageHistoryLength="2048"
maxPendingMessageCount="5"
maxReceivedMessageSize="8192"
maxBufferPoolSize="262144"/>
</standardEndpoint>
</udpDiscoveryEndpoint>
Voici la configuration complète du client utilisée dans l’exemple.
<configuration>
<system.serviceModel>
<client>
<!-- Create an endpoint, make kind="dynamicEndpoint" and use the endpointConfiguration to change settings of DynamicEndpoint -->
<endpoint name="calculatorEndpoint"
binding="wsHttpBinding"
contract="ICalculatorService"
kind ="dynamicEndpoint"
endpointConfiguration="dynamicEndpointConfiguration">
</endpoint>
</client>
<standardEndpoints>
<dynamicEndpoint>
<standardEndpoint name="dynamicEndpointConfiguration">
<discoveryClientSettings>
<!-- Controls where the discovery happens. In this case, Probe message is sent over UdpDiscoveryEndpoint. -->
<endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="adhocDiscoveryEndpointConfiguration" />
<!-- Add Scopes, ScopeMatchBy, Extensions and termination criteria in FindCriteria -->
<findCriteria scopeMatchBy="http://schemas.microsoft.com/ws/2008/06/discovery/rfc" duration="00:00:10" maxResults="1">
<scopes>
<add scope="http://www.microsoft.com/building42/floor1"/>
</scopes>
<!-- These extensions are sent from the client to the service as part of the probe message -->
<extensions>
<CustomMetadata>This is custom metadata that is sent to the service along with the client's find request.</CustomMetadata>
</extensions>
</findCriteria>
</discoveryClientSettings>
</standardEndpoint>
</dynamicEndpoint>
<udpDiscoveryEndpoint>
<!-- Specify the discovery protocol version and UDP transport settings. -->
<standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11">
<transportSettings duplicateMessageHistoryLength="2048"
maxPendingMessageCount="5"
maxReceivedMessageSize="8192"
maxBufferPoolSize="262144"/>
</standardEndpoint>
</udpDiscoveryEndpoint>
</standardEndpoints>
</system.serviceModel>
</configuration>
Pour utiliser cet exemple
Cet exemple utilise des points de terminaison HTTP et pour exécuter cet exemple, les listes de contrôle d’accès 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é devrait ajouter les listes de contrôle d’accès appropriées. Vous pouvez remplacer votre domaine et votre nom d’utilisateur pour les 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 l’exécutable du client. Notez que le client est en mesure de localiser le service.