Partager via


Configuration de liaisons pour les services Windows Communication Foundation

Lorsque vous créez une application, vous souhaitez souvent confier des décisions à l'administrateur après le déploiement de l'application. Par exemple, il n'existe souvent aucune façon de savoir à l'avance ce que sera une adresse de service ou un URI (Uniform Resource Identifier). Au lieu de coder de manière irréversible une adresse, il est préférable de permettre à un administrateur de le faire après avoir créé un service. Cette souplesse est obtenue par le biais de la configuration.

ms733099.note(fr-fr,VS.90).gifRemarque :
Utilisez l'ServiceModel Metadata Utility Tool (Svcutil.exe) avec le commutateur /config pour créer rapidement des fichiers de configuration.

Sections principales

Le schéma de configuration Windows Communication Foundation (WCF) inclut les trois sections principales suivantes (serviceModel, bindings et services) :

<configuration>
    <system.serviceModel>
        <bindings>
        </bindings>
        <services>
        </services>
        <behaviors>
        </behaviors>
    </system.serviceModel>
</configuration>

Éléments ServiceModel

Vous pouvez utiliser la section délimitée par l'élément system.ServiceModel pour configurer un type de service avec un ou plusieurs points de terminaison, ainsi que les paramètres pour un service. Ensuite, chaque point de terminaison peut être configuré avec une adresse, un contrat et une liaison. Pour plus d'informations sur les points de terminaison, consultez Vue d'ensemble de la création de points de terminaison.

Une liaison spécifie des transports (HTTP, TCP, canaux, Message Queuing ) et des protocoles (sécurité, fiabilité, flux de transaction) et se compose d'éléments de liaison, dont chacun spécifie un aspect de la manière dont un point de terminaison communique avec le monde.

Par exemple, la spécification de l'élément basicHttpBinding indique qu'il convient d'utiliser HTTP comme transport pour un point de terminaison. Cela permet de rattacher le point de terminaison au moment de l'exécution lorsque le service qui utilise ce point de terminaison est ouvert.

Il existe deux types de liaisons : les liaisons prédéfinies et les liaisons personnalisées. Les liaisons prédéfinies contiennent des combinaisons utiles d'éléments utilisés dans des scénarios courants. Pour obtenir une liste des types de liaisons prédéfinies que WCF fournit, consultez Liaisons fournies par le système. Si aucune collection de liaison prédéfinie n'a la combinaison correcte de fonctionnalités dont une application de service a besoin, vous pouvez construire des liaisons personnalisées pour satisfaire les spécifications de l'application. Pour plus d'informations sur les liaisons personnalisées, consultez <customBinding>.

Les quatre exemples ci-dessous illustrent les configurations de liaison les plus courantes utilisées pour configurer un service WCF.

Spécifier un point de terminaison pour utiliser un type de liaison

Le premier exemple montre comment spécifier un point de terminaison configuré avec une adresse, un contrat et une liaison.

<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
  <endpoint 
      address="/HelloWorld2/"
      contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
      binding="basicHttpBinding" />
  </endpoint>
</service>

Dans cet exemple, l'attribut type indique à quel type de service la configuration est destinée. Lorsque vous créez un service dans votre code avec le contrat HelloWorld, il est initialisé avec tous les points de terminaison définis dans l'exemple de configuration. Si l'assembly implémente un seul contrat de service, l'attribut type peut être omis parce que le service utilise le seul type disponible. L'attribut utilise une chaîne, qui doit être dans le format Namespace.Class, AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

L'attribut address spécifie l'URI que d'autres points de terminaison utilisent pour communiquer avec le service. L'URI peut être un chemin d'accès absolu ou relatif. Si une adresse relative est fournie, l'hôte est censé fournir une adresse de base appropriée au schéma de transport utilisé dans la liaison. Si une adresse n'est pas configurée, l'adresse de base est l'adresse pour ce point de terminaison.

L'attribut contract spécifie le contrat que ce point de terminaison expose. Le type d'implémentation de service doit implémenter le type de contrat. Si une implémentation de service implémente un seul type de contrat, cette propriété peut alors être omise.

L'attribut de binding sélectionne une liaison prédéfinie ou personnalisée à utiliser pour ce point de terminaison spécifique. Un point de terminaison qui ne sélectionne pas explicitement de liaison utilise la sélection de liaison par défaut, qui correspond à BasicHttpBinding.

Modification d'une liaison prédéfinie

Dans l'exemple ci-dessous, une liaison prédéfinie est modifiée et nommée. Elle peut alors être utilisée pour configurer tout point de terminaison dans le service. La liaison est modifiée en affectant 1 seconde à la valeur ReceiveTimeout. Notez que la propriété retourne un objet TimeSpan.

Cette liaison modifiée se trouve dans la section des liaisons et la liaison modifiée obtient un nom unique, shortTimeout, défini par l'attribut name. Cette liaison modifiée peut maintenant être utilisée lors de la création de tout point de terminaison en affectant le nom unique à l'attribut binding dans l'élément endpoint. Cela vous permet de disposer d'un nombre quasiment illimité de variations de la liaison standard.

ms733099.note(fr-fr,VS.90).gifRemarque :
Si vous ne créez pas de variation d'une liaison standard, vous n'avez pas à affecter de valeur quelconque à l'attribut bindingConfiguration. Dans ce cas, la liaison prédéfinie non modifiée est utilisée.

<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
  <endpoint 
      address="/HelloWorld2/"
      contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
      binding="basicHttpBinding" />
  </endpoint>
</service>
<bindings>
    <basicHttpBinding 
        name="shortTimeout"
        receiveTimeout="00:00:01"
    />
</bindings>

Configurer un comportement à appliquer à un service

Dans l'exemple ci-dessous, un comportement spécifique est configuré pour le type de service. L'élément metadataPublishing est utilisé pour permettre à l'ServiceModel Metadata Utility Tool (Svcutil.exe) d'interroger le service et de générer des documents WSDL (Web Services Description Language) à partir des métadonnées.

<behaviors>
    <behavior name="MetaPlusExceptions" >
        <metadataPublishing enableGetWsdl="true" /> 
    </behavior>
</behaviors>
<services>
    <service 
       type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
       serviceBehaviorName="MetaPlusExceptions">
       <endpoint 
          address="http://computer:8080/Hello"
          contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
          binding="basicHttpBinding" />
       </endpoint>
    </service>
</services>

La configuration précédente permet à un client d'appeler

svcutil /config:Client.exe.config http://computer:8080/Hello?wsdl

et d'obtenir les métadonnées du service typé "HelloWorld".

Spécifier un service avec deux points de terminaison qui utilisent des valeurs de liaison différentes

Dans ce dernier exemple, deux points de terminaison sont configurés pour le type de service Hello. Chaque point de terminaison utilise un attribut bindingConfiguration personnalisé différent du même type de liaison (chacun modifie basicHttpBinding).

<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
    <endpoint
        address="http://computer:8080/Hello"
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
        binding="basicHttpBinding"
        bindingConfiguration="shortTimeout"
    </endpoint>
    <endpoint
        address="http://computer:8080/Hello"
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
        binding="basicHttpBinding"
        bindingConfiguration="Secure"
     </endpoint>
</service>
<bindings>
    <basicHttpBinding 
        name="shortTimeout"
        timeout="00:00:00:01" 
     />
     <basicHttpBinding 
        name="Secure" />
        <Security mode="Transport" />
</bindings>

Voir aussi

Concepts

Liaisons fournies par le système
Vue d'ensemble de la création de points de terminaison
Utilisation de liaisons pour configurer des services et des clients