Configuration de liaisons pour les services Windows Communication FoundationConfiguring Bindings for Windows Communication Foundation Services

Lorsque vous créez une application, vous souhaitez souvent confier des décisions à l'administrateur après le déploiement de l'application.When creating an application, you often want to defer decisions to the administrator after the deployment of the 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).For example, there is often no way of knowing in advance what a service address, or Uniform Resource Identifier (URI), will be. Au lieu de d'encoder 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.Instead of hard-coding an address, it is preferable to allow an administrator to do so after creating a service. Cette souplesse est obtenue par le biais de la configuration.This flexibility is accomplished through configuration.

Notes

Utilisez l' outil ServiceModel Metadata Utility Tool (Svcutil. exe) avec le /config commutateur pour créer rapidement des fichiers de configuration.Use the ServiceModel Metadata Utility Tool (Svcutil.exe) with the /config switch to quickly create configuration files.

Sections principalesMajor Sections

Le schéma de configuration Windows Communication Foundation (WCF) comprend les trois sections principales suivantesserviceModel( bindings, et services):The Windows Communication Foundation (WCF) configuration scheme includes the following three major sections (serviceModel, bindings, and services):

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

Éléments ServiceModelServiceModel Elements

Vous pouvez utiliser la section délimitée par l' system.ServiceModel élément pour configurer un type de service avec un ou plusieurs points de terminaison, ainsi que des paramètres pour un service.You can use the section bounded by the system.ServiceModel element to configure a service type with one or more endpoints, as well as settings for a service. Ensuite, chaque point de terminaison peut être configuré avec une adresse, un contrat et une liaison.Each endpoint can then be configured with an address, a contract, and a binding. Pour plus d’informations sur les points de terminaison, consultez vue d’ensemblede la création de points de terminaison.For more information about endpoints, see Endpoint Creation Overview. Si aucun point de terminaison n'est spécifié, le runtime ajoute des points de terminaison par défaut.If no endpoints are specified, the runtime adds default endpoints. Pour plus d’informations sur les points de terminaison, les liaisons et les comportements par défaut, consultez Configuration simplifiée et Configuration simplifiée pour les services WCF.For more information about default endpoints, bindings, and behaviors, see Simplified Configuration and Simplified Configuration for WCF Services.

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.A binding specifies transports (HTTP, TCP, pipes, Message Queuing) and protocols (Security, Reliability, Transaction flows) and consists of binding elements, each of which specifies an aspect of how an endpoint communicates with the world.

Par exemple, si vous spécifiez l' <élément basicHttpBinding > , vous pouvez utiliser le protocole http comme transport pour un point de terminaison.For example, specifying the <basicHttpBinding> element indicates to use HTTP as the transport for an endpoint. 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.This is used to wire up the endpoint at run time when the service using this endpoint is opened.

Il existe deux types de liaisons : les liaisons prédéfinies et les liaisons personnalisées.There are two kinds of bindings: predefined and custom. Les liaisons prédéfinies contiennent des combinaisons utiles d’éléments utilisés dans des scénarios courants.Predefined bindings contain useful combinations of elements that are used in common scenarios. Pour obtenir la liste des types de liaison prédéfinis fournis par WCF, consultez liaisons fournies par le système.For a list of predefined binding types that WCF provides, see System-Provided Bindings. 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 exigences de l’application.If no predefined binding collection has the correct combination of features that a service application needs, you can construct custom bindings to meet the application's requirements. Pour plus d’informations sur les liaisons personnalisées, consultez <CustomBinding >.For more information about custom bindings, see <customBinding>.

Les quatre exemples suivants illustrent les configurations de liaison les plus courantes utilisées pour configurer un service WCF.The following four examples illustrate the most common binding configurations used for setting up a WCF service.

Spécification d’un point de terminaison pour utiliser un type de liaisonSpecifying an Endpoint to Use a Binding Type

Le premier exemple montre comment spécifier un point de terminaison configuré avec une adresse, un contrat et une liaison.The first example illustrates how to specify an endpoint configured with an address, a contract, and a binding.

<service name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">  
  <!-- This section is optional with the default configuration introduced  
       in .NET Framework 4. -->  
  <endpoint   
      address="/HelloWorld2/"  
      contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"  
      binding="basicHttpBinding" />
</service>  

Dans cet exemple, l'attribut name indique à quel type de service la configuration est destinée.In this example, the name attribute indicates which service type the configuration is for. 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.When you create a service in your code with the HelloWorld contract, it is initialized with all of the endpoints defined in the example configuration. Si l’assembly implémente un seul contrat de service name , l’attribut peut être omis, car le service utilise le seul type disponible.If the assembly implements only one service contract, the name attribute can be omitted because the service uses the only available type. L'attribut utilise une chaîne, qui doit être dans le format Namespace.Class, AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=nullThe attribute takes a string, which must be in the 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.The address attribute specifies the URI that other endpoints use to communicate to the service. L’URI peut être un chemin d’accès absolu ou relatif.The URI can be either an absolute or relative path. 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.If a relative address is provided, the host is expected to provide a base address that is appropriate for the transport scheme used in the binding. Si une adresse n'est pas configurée, l'adresse de base est l'adresse pour ce point de terminaison.If an address is not configured, the base address is assumed to be the address for that endpoint.

L'attribut contract spécifie le contrat que ce point de terminaison expose.The contract attribute specifies the contract this endpoint is exposing. Le type d'implémentation de service doit implémenter le type de contrat.The service implementation type must implement the contract type. Si une implémentation de service implémente un seul type de contrat, cette propriété peut alors être omise.If a service implementation implements a single contract type, then this property can be omitted.

L’attribut de binding sélectionne une liaison prédéfinie ou personnalisée à utiliser pour ce point de terminaison spécifique.The binding attribute selects a predefined or custom binding to use for this specific endpoint. Un point de terminaison qui ne sélectionne pas explicitement de liaison utilise la sélection de liaison par défaut, qui correspond à BasicHttpBinding.An endpoint that does not explicitly select a binding uses the default binding selection, which is BasicHttpBinding.

Modification d'une liaison prédéfinieModifying a Predefined Binding

Dans l'exemple suivant, une liaison prédéfinie est modifiée.In the following example, a predefined binding is modified. Elle peut alors être utilisée pour configurer tout point de terminaison dans le service.It can then be used to configure any endpoint in the service. La liaison est modifiée en affectant 1 seconde à la valeur ReceiveTimeout.The binding is modified by setting the ReceiveTimeout value to 1 second. Notez que la propriété retourne un objet TimeSpan.Note that the property returns a TimeSpan object.

Cette liaison modifiée se trouve dans la section consacrée aux liaisons.That altered binding is found in the bindings section. Cette liaison modifiée peut maintenant être utilisée lors de la création de tout point de terminaison en définissant l'attribut binding dans l'élément endpoint.This altered binding can now be used when creating any endpoint by setting the binding attribute in the endpoint element.

Notes

Si vous donnez un nom particulier à la liaison, le bindingConfiguration spécifié dans le point de terminaison du service doit lui correspondre.If you give a particular name to the binding, the bindingConfiguration specified in the service endpoint must match with it.

<service name="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" />
</service>  
<bindings>  
    <basicHttpBinding   
        receiveTimeout="00:00:01"  
    />  
</bindings>  

Configuration d'un comportement à appliquer à un serviceConfiguring a Behavior to Apply to a Service

Dans l'exemple ci-dessous, un comportement spécifique est configuré pour le type de service.In the following example, a specific behavior is configured for the service type. L' ServiceMetadataBehavior élément est utilisé pour permettre à l' outil ServiceModel Metadata Utility (Svcutil. exe) d’interroger le service et de générer des documents Web Services Description Language (WSDL) à partir des métadonnées.The ServiceMetadataBehavior element is used to enable the ServiceModel Metadata Utility Tool (Svcutil.exe) to query the service and generate Web Services Description Language (WSDL) documents from the metadata.

Notes

Si vous donnez un nom particulier au comportement, le behaviorConfiguration spécifié dans la section du point de terminaison ou du service doit lui correspondre.If you give a particular name to the behavior, the behaviorConfiguration specified in the service or endpoint section must match it.

<behaviors>  
    <behavior>  
        <ServiceMetadata httpGetEnabled="true" />   
    </behavior>  
</behaviors>  
<services>  
    <service   
       name="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" />
    </service>  
</services>  

La configuration précédente permet à un client d'appeler et d'obtenir les métadonnées du service typé « HelloWorld ».The preceding configuration enables a client to call and get the metadata of the "HelloWorld" typed service.

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

Spécification d’un service avec deux points de terminaison qui utilisent des valeurs de liaison différentesSpecifying a Service with Two Endpoints Using Different Binding Values

Dans ce dernier exemple, deux points de terminaison sont configurés pour le type de service HelloWorld.In this last example, two endpoints are configured for the HelloWorld service type. Chaque point de terminaison utilise un bindingConfiguration attribut personnalisé différent du même type de liaison (chacun modifie basicHttpBindingle).Each endpoint uses a different customized bindingConfiguration attribute of the same binding type (each modifies the basicHttpBinding).

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

Vous pouvez obtenir le même comportement à l'aide de la configuration par défaut en ajoutant une section protocolMapping et en configurant les liaisons comme illustré dans l'exemple suivant.You can get the same behavior using the default configuration by adding a protocolMapping section and configuring the bindings as demonstrated in the following example.

<protocolMapping>  
    <add scheme="http" binding="basicHttpBinding" bindingConfiguration="shortTimeout" />  
    <add scheme="https" binding="basicHttpBinding" bindingConfiguration="Secure" />  
</protocolMapping>  
<bindings>  
    <basicHttpBinding   
        name="shortTimeout"  
        timeout="00:00:00:01"   
     />  
     <basicHttpBinding   
        name="Secure" />  
        <Security mode="Transport" />  
</bindings>  

Voir aussiSee also