Vue d'ensemble de la création de points de terminaisonEndpoint Creation Overview

Toutes les communications avec un service Windows Communication Foundation (WCF) se produisent via les points de terminaison du service.All communication with a Windows Communication Foundation (WCF) service occurs through the endpoints of the service. Les points de terminaison fournissent aux clients l’accès aux fonctionnalités offertes par un service WCF.Endpoints provide the clients access to the functionality that a WCF service offers. Cette section décrit la structure d'un point de terminaison et explique comment définir un point de terminaison dans la configuration et dans le code.This section describes the structure of an endpoint and outlines how to define an endpoint in configuration and in code.

Structure d'un point de terminaisonThe Structure of an Endpoint

Chaque point de terminaison contient une adresse qui indique où rechercher le point de terminaison, une liaison qui spécifie le mode de communication d’un client avec le point de terminaison, et un contrat qui identifie les méthodes disponibles.Each endpoint contains an address that indicates where to find the endpoint, a binding that specifies how a client can communicate with the endpoint, and a contract that identifies the methods available.

  • Adresse.Address. L'adresse identifie le point de terminaison de manière unique et indique aux consommateurs potentiels l'emplacement du service.The address uniquely identifies the endpoint and tells potential consumers where the service is located. Elle est représentée dans le modèle d’objet WCF par l’adresse EndpointAddress, qui contient une Uniform Resource Identifier (URI) et des propriétés d’adresse qui incluent une identité, certains éléments Web Services Description Language (WSDL) et une collection d’en-têtes facultatifs.It is represented in the WCF object model by the EndpointAddress address, which contains a Uniform Resource Identifier (URI) and address properties that include an identity, some Web Services Description Language (WSDL) elements, and a collection of optional headers. Les en-têtes facultatifs fournissent des données d'adressage détaillées supplémentaires pour identifier ou interagir avec le point de terminaison.The optional headers provide additional detailed addressing information to identify or interact with the endpoint. Pour plus d’informations, consultez spécification d’une adresse de point de terminaison.For more information, see Specifying an Endpoint Address.

  • Liaison.Binding. La liaison spécifie le mode de communication avec le point de terminaison.The binding specifies how to communicate with the endpoint. La liaison spécifie comment le point de terminaison communique avec le monde, y compris quel protocole de transport utiliser (par exemple, TCP ou HTTP), quel encodage utiliser pour les messages (par exemple, texte ou binaire), et quelles exigences de sécurité sont nécessaires (par exemple, SSL [Secure Sockets Layer] ou la sécurité des messages SOAP).The binding specifies how the endpoint communicates with the world, including which transport protocol to use (for example, TCP or HTTP), which encoding to use for the messages (for example, text or binary), and which security requirements are necessary (for example, Secure Sockets Layer [SSL] or SOAP message security). Pour plus d’informations, consultez utilisation de liaisons pour configurer des services et des clients.For more information, see Using Bindings to Configure Services and Clients.

  • Contrat de service.Service contract. Le contrat de service définit les fonctionnalités que le point de terminaison expose au client.The service contract outlines what functionality the endpoint exposes to the client. Un contrat spécifie les opérations qu'un client peut appeler, la forme du message et le type de paramètres d'entrée ou de données requis pour appeler l'opération, ainsi que le type du traitement ou le message de réponse auquel le client peut s'attendre.A contract specifies the operations that a client can call, the form of the message and the type of input parameters or data required to call the operation, and the kind of processing or response message the client can expect. Trois types de contrats de base correspondent aux modèles d’échange de messages (MEPs, message exchange patterns) de base : datagramme (unidirectionnel), demande/réponse et duplex (bidirectionnel).Three basic types of contracts correspond to basic message exchange patterns (MEPs): datagram (one-way), request/reply, and duplex (bidirectional). Le contrat de service peut aussi employer des contrats de données et de message pour requérir des types de données spécifiques et des formats de message lors de son accès.The service contract can also employ data and message contracts to require specific data types and message formats when being accessed. Pour plus d’informations sur la définition d’un contrat de service, consultez conception de contrats de service.For more information about how to define a service contract, see Designing Service Contracts. Notez qu'un client peut aussi devoir implémenter un contrat défini par le service, appelé un contrat de rappel, pour recevoir des messages du service dans un MEP duplex.Note that a client may also be required to implement a service-defined contract, called a callback contract, to receive messages from the service in a duplex MEP. Pour plus d’informations, consultez services duplex.For more information, see Duplex Services.

Le point de terminaison pour un service peut être spécifié de manière impérative en utilisant le code ou de façon déclarative par la configuration.The endpoint for a service can be specified either imperatively by using code or declaratively through configuration. Si aucun point de terminaison n'est spécifié, le runtime fournit les points de terminaison par défaut en ajoutant un point de terminaison par défaut pour chaque adresse de base pour chaque contrat de service implémenté par le service.If no endpoints are specified then the runtime provides default endpoints by adding one default endpoint for each base address for each service contract implemented by the service. La définition de points de terminaison dans le code est généralement peu pratique car les liaisons et les adresses pour un service déployé sont en général différentes de celles utilisées au cours du développement du service.Defining endpoints in code is usually not practical because the bindings and addresses for a deployed service are typically different from those used while the service is being developed. En général, il est plus pratique de définir des points de terminaison de service à l'aide de la configuration plutôt que du code.Generally, it is more practical to define service endpoints using configuration rather than code. Le fait de conserver les informations de liaison et d'adressage hors du code leur permet de changer sans devoir recompiler ou de redéployer l'application.Keeping the binding and addressing information out of the code allows them to change without having to recompile and redeploy the application.

Notes

Lorsque vous ajoutez un point de terminaison de service qui effectue un emprunt d'identité, vous devez utiliser une des méthodes AddServiceEndpoint ou la méthode GetContract(Type, Type) pour charger correctement le contrat dans un nouvel objet ServiceDescription.When adding a service endpoint that performs impersonation, you must either use one of the AddServiceEndpoint methods or the GetContract(Type, Type) method to properly load the contract into a new ServiceDescription object.

Définition de points de terminaison dans le codeDefining Endpoints in Code

L'exemple suivant illustre comment spécifier un point de terminaison dans le code avec les éléments suivants :The following example illustrates how to specify an endpoint in code with the following:

  • Définissez un contrat pour un type de service IEcho qui accepte le nom d’une personne et Echo avec la réponse « Hello <Nom >! ».Define a contract for an IEcho type of service that accepts someone's name and echo with the response "Hello <name>!".

  • Implémentez un service Echo du type défini par le contrat IEcho.Implement an Echo service of the type defined by the IEcho contract.

  • Spécifiez une adresse de point de terminaison de http://localhost:8000/Echo pour le service.Specify an endpoint address of http://localhost:8000/Echo for the service.

  • Configurez le service Echo à l’aide d’une liaison WSHttpBinding.Configure the Echo service using a WSHttpBinding binding.

namespace Echo
{
   // Define the contract for the IEcho service
   [ServiceContract]
   public interface IEcho
   {
       [OperationContract]
       String Hello(string name)
   }

   // Create an Echo service that implements IEcho contract
   class Echo : IEcho
   {
      public string Hello(string name)
      {
         return "Hello" + name + "!";
      }
      public static void Main ()
      {
          //Specify the base address for Echo service.
          Uri echoUri = new Uri("http://localhost:8000/");

          //Create a ServiceHost for the Echo service.
          ServiceHost serviceHost = new ServiceHost(typeof(Echo),echoUri);

          // Use a predefined WSHttpBinding to configure the service.
          WSHttpBinding binding = new WSHttpBinding();

          // Add the endpoint for this service to the service host.
          serviceHost.AddServiceEndpoint(
             typeof(IEcho),
             binding,
             echoUri
           );

          // Open the service host to run it.
          serviceHost.Open();
     }
  }
}
' Define the contract for the IEcho service
    <ServiceContract()> _
    Public Interface IEcho
        <OperationContract()> _
        Function Hello(ByVal name As String) As String
    End Interface

' Create an Echo service that implements IEcho contract
    Public Class Echo
        Implements IEcho
        Public Function Hello(ByVal name As String) As String _
 Implements ICalculator.Hello
            Dim result As String = "Hello" + name + "!"
            Return result
        End Function

' Specify the base address for Echo service.
Dim echoUri As Uri = New Uri("http://localhost:8000/")

' Create a ServiceHost for the Echo service.
Dim svcHost As ServiceHost = New ServiceHost(GetType(HelloWorld), echoUri)

' Use a predefined WSHttpBinding to configure the service.
Dim binding As New WSHttpBinding()

' Add the endpoint for this service to the service host.
serviceHost.AddServiceEndpoint(GetType(IEcho), binding, echoUri)

' Open the service host to run it.
serviceHost.Open()

Notes

L'hôte de service est créé avec une adresse de base, puis le reste de l'adresse, relatif à l'adresse de base, est spécifié dans le cadre d'un point de terminaison.The service host is created with a base address and then the rest of the address, relative to the base address, is specified as part of an endpoint. Ce partitionnement de l'adresse permet de définir plus simplement plusieurs points de terminaison pour les services à un hôte.This partitioning of the address allows multiple endpoints to be defined more conveniently for services at a host.

Notes

Les propriétés de ServiceDescription dans l'application de service ne doivent pas être modifiées à l'issue de la méthode OnOpening sur ServiceHostBase.Properties of ServiceDescription in the service application must not be modified subsequent to the OnOpening method on ServiceHostBase. Certains membres, tels que la propriété Credentials et les méthodes AddServiceEndpoint sur ServiceHostBase et ServiceHost, lèvent une exception s'ils sont modifiés au-delà de ce point.Some members, such as the Credentials property and the AddServiceEndpoint methods on ServiceHostBase and ServiceHost, throw an exception if modified past that point. D'autres membres peuvent être modifiés, mais le résultat n'est pas défini.Others permit you to modify them, but the result is undefined.

De la même façon, sur le client les valeurs ServiceEndpoint ne doivent pas être modifiées après l'appel à OnOpening sur ChannelFactory.Similarly, on the client the ServiceEndpoint values must not be modified after the call to OnOpening on the ChannelFactory. La propriété Credentials lève une exception si elle est modifiée au-delà de ce point.The Credentials property throws an exception if modified past that point. Les autres valeurs de description du client peuvent être modifiées sans erreur, mais le résultat n'est pas défini.The other client description values can be modified without error, but the result is undefined.

Aussi bien pour le service que le client, il est recommandé de modifier la description avant d'appeler Open.Whether for the service or client, it is recommended that you modify the description prior to calling Open.

Définition de points de terminaison dans la configurationDefining Endpoints in Configuration

Lorsque vous créez une application, vous souhaitez souvent remettre des décisions à l'administrateur chargé de son déploiement.When creating an application, you often want to defer decisions to the administrator who is deploying the application. Par exemple, il est souvent impossible de déterminer à l'avance à quoi correspond une adresse de service (URI).For example, there is often no way of knowing in advance what a service address (a 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. Pour plus d’informations, consultez Configuration des services.For details, see Configuring Services.

Notes

Utilisez l' outil ServiceModel Metadata Utility Tool (Svcutil. exe) avec lenom de fichier/config: [,filename] pour créer rapidement des fichiers de configuration.Use the ServiceModel Metadata Utility Tool (Svcutil.exe) with the /config:filename[,filename] switch to quickly create configuration files.

Utilisation des points de terminaison par défautUsing Default Endpoints

Si aucun point de terminaison n'est spécifié dans le code ou dans la configuration, le runtime fournit les points de terminaison par défaut en ajoutant un point de terminaison par défaut pour chaque adresse de base pour chaque contrat de service implémenté par le service.If no endpoints are specified in code or in configuration then the runtime provides default endpoints by adding one default endpoint for each base address for each service contract implemented by the service. L'adresse de base peut être spécifiée dans le code ou dans la configuration, et les points de terminaison par défaut sont ajoutés lors de l'appel de Open() sur le ServiceHost.The base address can be specified in code or in configuration, and the default endpoints are added when Open() is called on the ServiceHost. Cet exemple est le même que celui de la section précédente, mais, étant donné qu'aucun point de terminaison n'est spécifié, les points de terminaison par défaut sont ajoutés.This example is the same example from the previous section, but since no endpoints are specified, the default endpoints are added.

namespace Echo
{
   // Define the contract for the IEcho service
   [ServiceContract]
   public interface IEcho
   {
       [OperationContract]
       String Hello(string name)
   }

   // Create an Echo service that implements IEcho contract
   public class Echo : IEcho
   {
      public string Hello(string name)
      {
         return "Hello" + name + "!";
      }
      public static void Main ()
      {
          //Specify the base address for Echo service.
          Uri echoUri = new Uri("http://localhost:8000/");

          //Create a ServiceHost for the Echo service.
          ServiceHost serviceHost = new ServiceHost(typeof(Echo),echoUri);

          // Open the service host to run it. Default endpoints
          // are added when the service is opened.
          serviceHost.Open();
     }
  }
}
' Define the contract for the IEcho service
    <ServiceContract()> _
    Public Interface IEcho
        <OperationContract()> _
        Function Hello(ByVal name As String) As String
    End Interface

' Create an Echo service that implements IEcho contract
    Public Class Echo
        Implements IEcho
        Public Function Hello(ByVal name As String) As String _
 Implements ICalculator.Hello
            Dim result As String = "Hello" + name + "!"
            Return result
        End Function

' Specify the base address for Echo service.
Dim echoUri As Uri = New Uri("http://localhost:8000/")

' Open the service host to run it. Default endpoints
' are added when the service is opened.
serviceHost.Open()

Si des points de terminaison sont fournis explicitement, les points de terminaison par défaut peuvent toujours être ajoutés en appelant AddDefaultEndpoints sur le ServiceHost avant d'appeler Open.If endpoints are explicitly provided, the default endpoints can still be added by calling AddDefaultEndpoints on the ServiceHost before calling Open. Pour plus d’informations sur les points de terminaison par défaut, consultez configuration simplifiée et configuration simplifiée pour les services WCF.For more information about default endpoints, see Simplified Configuration and Simplified Configuration for WCF Services.

Voir aussiSee also