Comment : créer un client Windows Communication Foundation

Il s'agit de la quatrième des six tâches requises pour créer un service Windows Communication Foundation (WCF) de base et un client pouvant appeler le service. Pour disposer d'une vue d'ensemble des six tâches, consultez la rubrique Didacticiel de mise en route.

Cette rubrique décrit comment extraire les métadonnées d'un service WCF et les utiliser pour créer un proxy WCF qui peut accéder au service. Cette tâche est effectuée à l'aide de l'Outil Service Model Metadata Tool (Svcutil.exe) fourni par WCF. Cet outil obtient les métadonnées du service et génère un fichier de code source managé pour un proxy dans le langage que vous avez choisi. L'outil crée non seulement le proxy client, mais également le fichier de configuration pour le client qui permet à l'application cliente de se connecter au service au niveau de l'un de ses points de terminaison.

ms733133.note(fr-fr,VS.100).gifRemarque :
Vous pouvez ajouter une référence de service à votre projet client dans Visual Studio 2010 afin de créer le proxy client au lieu d'utiliser le Outil Service Model Metadata Tool (Svcutil.exe).

ms733133.Warning(fr-fr,VS.100).gif Attention :
Lors de l'appel d'un service WCF à partir d'un projet de bibliothèque de classes dans Visual Studio 2010, vous pouvez utiliser la fonctionnalité Ajouter une référence de service pour générer automatiquement un proxy et le fichier de configuration associé. Le fichier de configuration ne sera pas utilisé par le projet de bibliothèque de classes. Vous devrez copier le fichier de configuration dans le répertoire qui contient le fichier exécutable qui appellera la bibliothèque de classes.

L'application cliente utilise le proxy généré pour créer un objet client WCF. Cette procédure est décrite dans la rubrique Comment : utiliser un client Windows Communication Foundation.

Le code du client généré par cette tâche est fourni dans l'exemple qui suit la procédure.

Pour créer un client Windows Communication Foundation

  1. Créez un projet dans la solution actuelle pour le client dans Visual Studio 2010 en procédant comme suit :

    1. Dans l'Explorateur de solutions (qui se trouve dans la partie supérieure droite) dans la même solution contenant le service, cliquez avec le bouton droit sur la solution actuelle (pas sur le projet), puis sélectionnez successivement Ajouter et Nouveau projet.

    2. Dans la boîte de dialogue Ajouter un nouveau projet, sélectionnez Visual Basic ou Visual C#, choisissez le modèle Application console et nommez-le Client. Utilisez l'emplacement par défaut.

    3. Cliquez sur OK.

  2. Ajoutez une référence à System.ServiceModel.dll pour le projet :

    1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le dossier References sous le projet Client, puis sélectionnez Ajouter une référence.

    2. Sélectionnez l'onglet .NET puis System.ServiceModel.dll (version 4.0.0.0) dans la zone de liste, puis cliquez sur OK.

    ms733133.note(fr-fr,VS.100).gifRemarque :
    Lorsque vous utilisez un compilateur de ligne de commande (par exemple, Csc.exe ou Vbc.exe), vous devez également indiquer le chemin d'accès aux assemblys. Par défaut, sur un ordinateur qui exécute Windows Vista, par exemple, le chemin d'accès est : Windows\Microsoft.NET\Framework\v4.0.

  3. Ajoutez une instruction using (Imports dans Visual Basic) pour l'espace de noms System.ServiceModel dans le fichier Program.cs ou Program.vb généré.

    Imports System.ServiceModel
    
    using System.ServiceModel;
    
  4. Dans Visual Studio, appuyez sur F5 pour démarrer le service créé à la rubrique précédente. Pour plus d'informations, consultez Comment : héberger et exécuter un service Windows Communication Foundation de base.

  5. Exécutez le Outil Service Model Metadata Tool (Svcutil.exe) avec les commutateurs appropriés pour créer le code client et un fichier de configuration en procédant comme suit :

    1. Dans le menu Démarrer, cliquez sur Tous les programmes, puis sur Visual Studio 2010. Cliquez sur Visual Studio Tools, puis sur Invite de commandes de Visual Studio 2010.

    2. Accédez au répertoire où vous souhaitez placer le code client. Si vous avez créé le projet client en utilisant l'emplacement par défaut, le répertoire est C:\Users\<nom_utilisateur>\My Documents\Visual Studio 10\Projects\Service\Client.

    3. Utilisez l'outil de ligne de commande Outil Service Model Metadata Tool (Svcutil.exe) avec les commutateurs appropriés pour créer le code client. L'exemple suivant génère un fichier de code et un fichier de configuration pour le service.

      svcutil.exe /language:vb /out:generatedProxy.vb /config:app.config https://localhost:8000/ServiceModelSamples/service
      
      svcutil.exe /language:cs /out:generatedProxy.cs /config:app.config https://localhost:8000/ServiceModelSamples/service
      

      Par défaut, le code proxy client est généré dans un fichier nommé d'après le service (dans ce cas, par exemple, CalculatorService.cs ou CalculatorService.vb, l'extension étant appropriée au langage de programmation : .vb pour Visual Basic ou .cs pour C#). Le commutateur /out remplace le nom du fichier de proxy client par GeneratedProxy.cs. Le commutateur /config remplace par App.config le nom du fichier de configuration client par défaut Output.config. Notez que ces deux fichiers sont générés dans le répertoire C:\Users\<nom_utilisateur>\My Documents\Visual Studio 10\Projects\Service\Client.

  6. Ajoutez le proxy généré au projet client dans Visual Studio, cliquez avec le bouton droit sur ce projet dans l'Explorateur de solutions, puis sélectionnez successivement Ajouter et Élément Existant. Sélectionnez le fichier generatedProxy généré à l'étape précédente.

Exemple

Cet exemple présente le code client généré par le Outil Service Model Metadata Tool (Svcutil.exe).

'------------------------------------------------------------------------------
' <auto-generated>
'     This code was generated by a tool.
'     Runtime Version:2.0.50727.1366
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On



<System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0"),  _
 System.ServiceModel.ServiceContractAttribute([Namespace]:="http://Microsoft.ServiceModel.Samples", ConfigurationName:="ICalculator")>  _
Public Interface ICalculator
    
    <System.ServiceModel.OperationContractAttribute(Action:="http://Microsoft.ServiceModel.Samples/ICalculator/Add", ReplyAction:="http://Microsoft.ServiceModel.Samples/ICalculator/AddResponse")>  _
    Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
    
    <System.ServiceModel.OperationContractAttribute(Action:="http://Microsoft.ServiceModel.Samples/ICalculator/Subtract", ReplyAction:="http://Microsoft.ServiceModel.Samples/ICalculator/SubtractResponse")>  _
    Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double
    
    <System.ServiceModel.OperationContractAttribute(Action:="http://Microsoft.ServiceModel.Samples/ICalculator/Multiply", ReplyAction:="http://Microsoft.ServiceModel.Samples/ICalculator/MultiplyResponse")>  _
    Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double
    
    <System.ServiceModel.OperationContractAttribute(Action:="http://Microsoft.ServiceModel.Samples/ICalculator/Divide", ReplyAction:="http://Microsoft.ServiceModel.Samples/ICalculator/DivideResponse")>  _
    Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
End Interface

<System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")>  _
Public Interface ICalculatorChannel
    Inherits ICalculator, System.ServiceModel.IClientChannel
End Interface

<System.Diagnostics.DebuggerStepThroughAttribute(),  _
 System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")>  _
Partial Public Class CalculatorClient
    Inherits System.ServiceModel.ClientBase(Of ICalculator)
    Implements ICalculator
    
    Public Sub New()
        MyBase.New
    End Sub
    
    Public Sub New(ByVal endpointConfigurationName As String)
        MyBase.New(endpointConfigurationName)
    End Sub
    
    Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String)
        MyBase.New(endpointConfigurationName, remoteAddress)
    End Sub
    
    Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As System.ServiceModel.EndpointAddress)
        MyBase.New(endpointConfigurationName, remoteAddress)
    End Sub
    
    Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding, ByVal remoteAddress As System.ServiceModel.EndpointAddress)
        MyBase.New(binding, remoteAddress)
    End Sub
    
    Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add
        Return MyBase.Channel.Add(n1, n2)
    End Function
    
    Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract
        Return MyBase.Channel.Subtract(n1, n2)
    End Function
    
    Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply
        Return MyBase.Channel.Multiply(n1, n2)
    End Function
    
    Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide
        Return MyBase.Channel.Divide(n1, n2)
    End Function
End Class
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:2.0.50727.1366
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------



[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(Namespace="http://Microsoft.ServiceModel.Samples", ConfigurationName="ICalculator")]
public interface ICalculator
{
    
    [System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Add", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/AddResponse")]
    double Add(double n1, double n2);
    
    [System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Subtract", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/SubtractResponse")]
    double Subtract(double n1, double n2);
    
    [System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Multiply", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/MultiplyResponse")]
    double Multiply(double n1, double n2);
    
    [System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Divide", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/DivideResponse")]
    double Divide(double n1, double n2);
}

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public interface ICalculatorChannel : ICalculator, System.ServiceModel.IClientChannel
{
}

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public partial class CalculatorClient : System.ServiceModel.ClientBase<ICalculator>, ICalculator
{
    
    public CalculatorClient()
    {
    }
    
    public CalculatorClient(string endpointConfigurationName) : 
            base(endpointConfigurationName)
    {
    }
    
    public CalculatorClient(string endpointConfigurationName, string remoteAddress) : 
            base(endpointConfigurationName, remoteAddress)
    {
    }
    
    public CalculatorClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
            base(endpointConfigurationName, remoteAddress)
    {
    }
    
    public CalculatorClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
            base(binding, remoteAddress)
    {
    }
    
    public double Add(double n1, double n2)
    {
        return base.Channel.Add(n1, n2);
    }
    
    public double Subtract(double n1, double n2)
    {
        return base.Channel.Subtract(n1, n2);
    }
    
    public double Multiply(double n1, double n2)
    {
        return base.Channel.Multiply(n1, n2);
    }
    
    public double Divide(double n1, double n2)
    {
        return base.Channel.Divide(n1, n2);
    }
}

Vous avez créé un client Windows Communication Foundation (WCF). Poursuivez avec Comment : configurer un client Windows Communication Foundation de base pour configurer le client. Pour obtenir des informations de dépannage, consultez Dépannage du didacticiel de mise en route.

Voir aussi

Tâches

Getting Started, exemple
Self-Host
Comment : publier les métadonnées d'un service à l'aide d'un fichier de configuration
Comment : utiliser Svcutil.exe pour télécharger des documents de métadonnées

Concepts

Outil Service Model Metadata Tool (Svcutil.exe)