Exemple Configuration
Cet exemple illustre l'utilisation d'un fichier de configuration pour rendre un service détectable.
Remarque : |
---|
Cet exemple implémente la découverte dans la configuration. Pour obtenir un exemple qui implémente la découverte dans le code, consultez Exemple Basic. |
Remarque : |
---|
Les exemples peuvent déjà être installés sur votre ordinateur. Recherchez le répertoire (par défaut) suivant avant de continuer.
<LecteurInstall>:\WF_WCF_Samples
Si ce répertoire n'existe pas, rendez-vous sur la page (éventuellement en anglais) des exemples Windows Communication Foundation (WCF) et Windows Workflow Foundation (WF) pour .NET Framework 4 pour télécharger tous les exemples Windows Communication Foundation (WCF) et WF. Cet exemple se trouve dans le répertoire suivant.
<LecteurInstall>:\WF_WCF_Samples\WCF\Basic\Discovery\Configuration
|
Configuration du service
Le fichier de configuration de cet exemple illustre deux fonctionnalités :
rendre le service détectable sur un UdpDiscoveryEndpoint standard ;
ajuster les informations relatives à la découverte pour le point de terminaison d'application du service et ajuster certains paramètres liés à découverte sur le point de terminaison standard.
Pour activer la découverte, deux modifications doivent être apportées au 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 UdpDiscoveryEndpoint standard. 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 comportement
<serviceDiscovery>
est ajouté à la section<serviceBehaviors>
. Ainsi, le service peut ê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 Probe et Resolve. Grâce à ces deux ajouts, le service est détectable au point de terminaison de découverte spécifié.
Ce fichier de configuration va au delà de ces simples étapes en modifiant des comportements supplémentaires. Il est possible de contrôler les informations relatives à 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 marquer ce point de terminaison avec Scopes et des métadonnées XML personnalisées. Pour cela, l'utilisateur doit ajouter une propriété behaviorConfiguration
au point de terminaison d'application. Dans ce cas, la propriété suivante est ajoutée au point de terminaison d'application.
behaviorConfiguration="endpointBehaviorConfiguration"
Vous pouvez à présent, via l'élément de configuration de comportement, contrôler les attributs relatifs à la découverte. Dans ce cas, deux portées sont ajoutées au point de terminaison d'application.
Vous pouvez également contrôler des détails spécifiques du point de terminaison de découverte. Cette opération s'effectue via le StandardEndpointsSection. Dans cet exemple, la version du protocole utilisée est modifiée et un attribut maxResponseDelay
est ajouté, comme le montre l'exemple de code suivant.
<configuration>
<system.serviceModel>
<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>
<behaviors>
<serviceBehaviors>
<behavior name="calculatorServiceBehavior">
<serviceDiscovery/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="endpointBehaviorConfiguration">
<endpointDiscovery>
<scopes>
<add scope="http://www.example.org/calculator"/>
<add scope="ldap:///ou=engineering,o=exampleorg,c=us"/>
</scopes>
</endpointDiscovery>
</behavior>
</endpointBehaviors>
</behaviors>
<standardEndpoints>
<udpDiscoveryEndpoint>
<!-- Specify the discovery protocol version and maxResponseDelay -->
<standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" maxResponseDelay="00:00:00.600" />
</udpDiscoveryEndpoint>
</standardEndpoints>
</system.serviceModel>
</configuration>
Configuration client
Le fichier de configuration de l'application pour le client utilise un standardEndpoint
de type dynamicEndpoint
afin d'utiliser la découverte. Lorsqu'un client utilise un dynamicEndpoint
, le runtime effectue automatiquement la découverte. Différents paramètres par défaut sont utilisés pendant la découverte, comme discoveryClient
, qui recherche un service correspondant au contrat spécifié par le client à l'aide d'un point de terminaison udpDiscovery standard. Cet exemple étend cette fonctionnalité et modifie le FindCriteria utilisé par le client, ainsi que certaines propriétés de l'updDiscoveryEndpoint
standard utilisé pour la découverte. Les critères FindCriteria sont modifiés de façon à utiliser une portée et un algorithme scopeMatchBy
spécifiques, 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 de messages Probe
. Enfin, certaines modifications sont apportées au UdpDiscoveryEndpoint, comme la version du protocole utilisée et des paramètres propres au protocole UDP, ainsi que le montre le fichier de configuration suivant.
<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="https://schemas.microsoft.com/ws/2008/06/discovery/rfc" duration="00:00:10" maxResults="1">
<scopes>
<add scope="https://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>
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 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.