Partager via


Accès aux services à l'aide d'un client WCF

Après la création d'un service, l'étape suivante consiste à créer un client WCF. Une application cliente utilise le client WCF pour communiquer avec le service. En général, les applications clientes importent les métadonnées d'un service pour générer le code client WCF qui permet d'appeler le service.

Les principales étapes pour créer un client WCF sont les suivantes :

  1. Compiler le code de service.
  2. Utiliser l'ServiceModel Metadata Utility Tool (SvcUtil.exe) pour créer le client WCF.

Outil Service Model Metadata Tool

L'ServiceModel Metadata Utility Tool (Svcutil.exe) est un outil de ligne de commande qui permet de générer du code à partir de métadonnées. Voici un exemple d'utilisation d'une commande Svcutil.exe de base.

Svcutil.exe <service's Metadata Exchange (MEX) address or HTTP GET address> 

Vous pouvez également utiliser Svcutil.exe avec des fichiers WSDL (Web Services Description Language) et XSD (XML Schema Definition) sur le système de fichiers.

Svcutil.exe <list of WSDL and XSD files on file system>

Le résultat est un fichier de code qui contient le code client WCF que l'application cliente peut utiliser pour appeler le service.

L'outil permet également de générer des fichiers de configuration.

Svcutil.exe <file1 [,file2]>

Si un seul nom de fichier est fourni, il s'agit du nom du fichier de sortie. Si deux noms de fichiers sont fournis, le premier est un fichier de configuration d'entrée dont le contenu est fusionné avec la configuration générée et écrit dans le deuxième fichier. Pour plus d'informations sur la configuration, consultez Configuration de liaisons pour les services Windows Communication Foundation.

ms734691.Important(fr-fr,VS.90).gif Remarque :
Les demandes de métadonnées non sécurisées représentent certains risques comme toute demande réseau non sécurisée. Si vous n'êtes pas certain de l'identité du point de terminaison avec lequel vous communiquez, il est possible que les informations que vous récupérez soient des métadonnées provenant d'un service malveillant.

Exemple

L'exemple de code suivant montre un contrat de service créé pour un service.

// Define a service contract.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    // Other methods are not shown here.
}
' Define a service contract.
<ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")> _
Public Interface ICalculator
    <OperationContract()>  _
    Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double 
    ' Other methods are not shown here.
End Interface 

L'outil Service Model Metadata Tool génère la classe du client WCF suivante. La classe hérite de la classe générique ClientBase et implémente l'interface ICalculator. L'outil génère également l'interface ICalculator (qui n'est pas présentée ici).

public partial class CalculatorClient : System.ServiceModel.ClientBase<ICalculator>, ICalculator
{
    public CalculatorClient(){}
    
    public CalculatorClient(string configurationName) : 
            base(configurationName)
    {}
    
    public CalculatorClient(System.ServiceModel.Binding binding) : 
            base(binding)
    {}
    
    public CalculatorClient(System.ServiceModel.EndpointAddress address,
    System.ServiceModel.Binding binding) : 
            base(address, binding)
    {}
    
    public double Add(double n1, double n2)
    {
        return base.InnerChannel.Add(n1, n2);
    }
}
Partial Public Class CalculatorClient
    Inherits System.ServiceModel.ClientBase(Of ICalculator)
    Implements ICalculator
    
    Public Sub New()
        MyBase.New
    End Sub
    
    Public Sub New(ByVal configurationName As String)
        MyBase.New(configurationName)
    End Sub
    
    Public Sub New(ByVal binding As System.ServiceModel.Binding)
        MyBase.New(binding)
    End Sub
    
    Public Sub New(ByVal address As _
    System.ServiceModel.EndpointAddress, _
    ByVal binding As System.ServiceModel.Binding)
        MyBase.New(address, binding)
    End Sub
    
    Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As _
    Double Implements ICalculator.Add
        Return MyBase.InnerChannel.Add(n1, n2)
    End Function 
End Class

Utilisation du client WCF

Pour utiliser le client WCF, créez une instance du client WCF, puis appelez ses méthodes, tel qu'indiqué dans le code suivant.

// Create a client object with the given client endpoint configuration.
CalculatorClient calcClient = new CalculatorClient("CalculatorEndpoint"));
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = calcClient.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
' Create a client object with the given client endpoint configuration.
Dim calcClient As CalculatorClient = _
New CalculatorClient("CalculatorEndpoint")

' Call the Add service operation.
Dim value1 As Double = 100.00D
Dim value2 As Double = 15.99D
Dim result As Double = calcClient.Add(value1, value2)
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result)

Débogage d'exceptions levées par un Client

De nombreuses exceptions levées par un client WCF sont provoquées par une exception sur le service. En voici quelques exemples :

  • SocketException : une connexion existante a été arrêtée de force par l'hôte distant.
  • CommunicationException : la connexion sous-jacente s'est arrêtée de façon inattendue.
  • CommunicationObjectAbortedException : la connexion de socket a été abandonnée. Cela peut être dû à une erreur lors du traitement de votre message, l'expiration du délai de réception par l'hôte distant ou un problème de ressource sur le réseau sous-jacent.

Lorsque ces types d'exceptions se produisent, le meilleur moyen de les résoudre consiste à activer le suivi du côté service et de déterminer l'exception qui s'y est produite. le suivi, consultez Suivi et Utilisation du suivi pour résoudre les problèmes posés par votre application.

Voir aussi

Tâches

Comment : créer un client Windows Communication Foundation
Comment : accéder aux services ayant un contrat duplex
Comment : appeler des opérations de service WCF de façon asynchrone
Comment : accéder aux services WCF avec des contrats unidirectionnels et demande-réponse
Comment : accéder à un service WSE 3.0 avec un client WCF
Comment : améliorer le temps de démarrage des applications clientes WCF à l'aide de XmlSerializer

Concepts

Fonctionnement du code client généré
Spécification du comportement du client au moment de l'exécution
Configuration des comportements clients