Comment : définir un contrat de service Windows Communication Foundation

C'est la première 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.

Lors de la création d'un service WCF de base, la première tâche consiste à définir un contrat. Le contrat spécifie les opérations prises en charge par le service. Une opération peut être considérée comme une méthode de service Web. Les contrats sont créés en définissant une interface C++, C# ou Visual Basic (VB). Chaque méthode dans l'interface correspond à une opération de service spécifique. Chaque interface doit avoir le ServiceContractAttribute qui s'applique à elle et chaque opération doit avoir le OperationContractAttribute qui s'applique à elle. Si une méthode dans une interface qui a le ServiceContractAttribute n'a pas le OperationContractAttribute, cette méthode n'est pas exposée.

Le code utilisé pour cette tâche est fourni dans l'exemple qui suit la procédure.

Pour créer un contrat Windows Communication Foundation avec une interface

  1. Ouvrez Visual Studio 2010 en tant qu'administrateur en cliquant avec le bouton droit sur le programme dans le menu Démarrer et en sélectionnant Exécuter en tant qu'administrateur.

  2. Créez un projet d'application console. Cliquez sur le menu Fichier et sélectionnez Nouveau, Projet. Dans la boîte de dialogue Nouveau projet, sélectionnez Visual Basic ou Visual C#, choisissez le modèle Application console et nommez-le Service. Utilisez l'emplacement par défaut.

  3. Pour un projet C#, Visual Studio crée un fichier appelé Program.cs. Cette classe contiendra une méthode vide appelée Main (). Pour un projet VB, Visual Studio crée un fichier appelé Module1.vb avec une sous-routine vide appelée Main (). Ces méthodes sont obligatoires pour un projet d'application console à générer correctement, donc vous pouvez les laisser sans risque dans le projet.

  4. Remplacez l'espace de noms Service par défaut par Microsoft.ServiceModel.Samples. Pour ce faire, cliquez avec le bouton droit sur le projet dans l'Explorateur de solutions et sélectionnez Propriétés. Assurez-vous que l'onglet Application situé sur le côté gauche de la boîte de dialogue Propriétés est sélectionné. Pour un projet C#, tapez Microsoft.ServiceModel.Samples dans la zone d'édition intitulée Espace de noms par défaut. Pour un projet VB, tapez Microsoft.ServiceModel.Samples dans la zone d'édition désignée comme espace de noms Root. Cliquez sur le menu Fichier et sélectionnez Enregistrer tout pour enregistrer vos modifications.

  5. Si vous utilisez C#, modifiez l'espace de noms dans le fichier Program.cs généré pour qu'il indique Microsoft.ServiceModel.Samples, comme illustré dans l'exemple suivant.

    namespace Microsoft.ServiceModel.Samples 
    {
        class Program
        {
            static void Main(string[] args)
            {
            }
        }
    }
    

    Si vous utilisez VB, ajoutez une instruction Namespace et une instruction End Namespace au fichier Module1.vb généré, comme indiqué dans l'exemple suivant.

    Namespace Microsoft.ServiceModel.Samples
        Module Module1
            Sub Main()
            End Sub
        End Module
    End Namespace
    
  6. Ajoutez une référence à System.ServiceModel.dll au projet :

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

    2. Sélectionnez l'onglet .NET dans la boîte de dialogue Ajouter une référence et faites défiler vers le bas jusqu'à ce que System.ServiceModel (version 4.0.0.0) s'affiche, sélectionnez-le et cliquez sur OK.

    ms731835.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 ».

  7. Ajoutez une instruction using (Imports dans Visual Basic) pour l'espace de noms System.ServiceModel.

    Imports System.ServiceModel
    
    using System.ServiceModel;
    
  8. Définissez une nouvelle interface appelée ICalculator et appliquez-lui l'attribut ServiceContractAttribute avec une valeur Namespace de http://Microsoft.ServiceModel.Samples. La spécification explicite de l'espace de noms est recommandée car elle évite l'ajout de la valeur de l'espace de noms par défaut au nom de contrat.

    ms731835.note(fr-fr,VS.100).gifRemarque :
    Lorsque vous utilisez des attributs pour annoter une interface ou une classe, vous pouvez supprimer la partie « Attribute » du nom d'attribut. Par conséquent, ServiceContractAttribute devient [ServiceContract] dans C#, ou <ServiceContract> dans Visual Basic.

    <ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples")> _
    Public Interface ICalculator
    
    [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
    public interface ICalculator
    
  9. Déclarez une méthode pour chaque opération que le contrat ICalculator expose (ajout, soustraction, multiplication et division) dans l'interface et appliquez l'attribut OperationContractAttribute à chaque méthode que vous souhaitez exposer dans le cadre du contrat WCF public.

        <OperationContract()> _
    Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()> _
        Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()> _
        Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()> _
        Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
    
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
    

Exemple

L'exemple de code suivant présente une interface de base qui définit un contrat de service.

Imports System
' Step 5: Add the Imports statement for the System.ServiceModel namespace
Imports System.ServiceModel

Namespace Microsoft.ServiceModel.Samples
    ' Step 6: 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
        <OperationContract()> _
        Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()> _
        Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()> _
        Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
    End Interface
End Namespace
using System;
// Step 5: Add the using statement for the System.ServiceModel namespace
using System.ServiceModel;
namespace Microsoft.ServiceModel.Samples
{
  // Step 6: Define a service contract.
  [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
  public interface ICalculator
  {
    // Step7: Create the method declaration for the contract.
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
  }
}

Maintenant que l'interface est créée, consultez Comment : implémenter un contrat de service Windows Communication Foundation pour l'implémenter. Pour obtenir des informations de dépannage, consultez Dépannage du didacticiel de mise en route.

Voir aussi

Tâches

Comment : implémenter un contrat de service Windows Communication Foundation
Getting Started, exemple
Self-Host

Référence

ServiceContractAttribute
OperationContractAttribute