Comment : accéder aux services ayant un contrat duplex

Windows Communication Foundation (WCF) dispose d'une fonctionnalité qui permet de créer un service utilisant un modèle de messagerie duplex. Ce modèle permet à un service de communiquer avec un client via un rappel. Cette rubrique contient la procédure permettant de créer un client WCF dans une classe client qui implémente une interface de rappel.

Une liaison double expose l'adresse IP du client au service. Ce client doit utiliser un mode de sécurité afin de garantir sa connexion à un service fiable.

Pour obtenir un didacticiel sur la création de WCF services et clients de base, consultez Didacticiel de mise en route.

Pour accéder à un service duplex

  1. Créez un service qui contient deux interfaces. La première interface est destinée au service, la seconde au rappel. Pour plus d'informations sur le sujet suivant la création d'un service duplex, consultez Comment : créer un contrat duplex.

  2. Exécutez le service.

  3. Utilisez l'outil Outil Service Model Metadata Tool (Svcutil.exe) afin de générer les contrats (interfaces) du client. Pour plus d'informations sur la procédure à suivre, consultez Comment : créer un client Windows Communication Foundation.

  4. Implémentez l'interface de rappel dans la classe client, comme illustré dans l'exemple suivant.

    public class CallbackHandler : ICalculatorDuplexCallback
    {
        public void Result(double result)
        {
            Console.WriteLine("Result ({0})", result);
        }
        public void Equation(string equation)
        {
            Console.WriteLine("Equation({0})", equation);
        }
    }
    
    Public Class CallbackHandler 
    Implements ICalculatorDuplexCallback
       Public Sub Result (ByVal result As Double)
          Console.WriteLine("Result ({0})", result)
       End Sub
        Public Sub Equation(ByVal equation As String)
            Console.Writeline("Equation({0})", equation)
        End Sub
    End Class
    
  5. Créez une instance de la classe InstanceContext. Le constructeur a besoin d'une instance de la classe client.

    InstanceContext site = new InstanceContext(new CallbackHandler());
    
    Dim site As InstanceContext = New InstanceContext(new CallbackHandler())
    
  6. Créez une instance de client WCF à l'aide du constructeur qui nécessite un objet InstanceContext. Le second paramètre du constructeur correspond au nom du point de terminaison trouvé dans le fichier de configuration.

    CalculatorDuplexClient wcfClient = 
    new CalculatorDuplexClient(site, "default")
    
    Dim wcfClient As New CalculatorDuplexClient(site, "default")
    
  7. Appelez la méthode du client WCF comme requis.

Exemple

L'exemple de code suivant illustre comment créer une classe client qui accède à un contrat duplex.

Imports System
Imports System.ServiceModel

Namespace Microsoft.ServiceModel.Samples

    ' The service contract is defined in generatedClient.vb, generated from the service by the svcutil tool.

    ' Define class which implements callback interface of duplex contract
    Public Class CallbackHandler
        Implements ICalculatorDuplexCallback

        Public Sub Result(ByVal result As Double) Implements ICalculatorDuplexCallback.Result
            Console.WriteLine("Result({0})", result)
        End Sub

        Public Sub Equation(ByVal eqn As String) Implements ICalculatorDuplexCallback.Equation
            Console.WriteLine("Equation({0})", eqn)
        End Sub
    End Class

    Class Client
        Public Shared Sub Main()

            ' Construct InstanceContext to handle messages on callback interface
            Dim instanceContext As New InstanceContext(New CallbackHandler())

            ' Create a client
            Dim wcfClient As New CalculatorDuplexClient(instanceContext)
            Console.WriteLine("Press <ENTER> to terminate client once the output is displayed.")
            Console.WriteLine()

            Try
                ' Call the AddTo service operation.
                Dim value As Double = 100
                wcfClient.AddTo(value)

                ' Call the SubtractFrom service operation.
                value = 50
                wcfClient.SubtractFrom(value)

                ' Call the MultiplyBy service operation.
                value = 17.65
                wcfClient.MultiplyBy(value)

                ' Call the DivideBy service operation.
                value = 2
                wcfClient.DivideBy(value)

                ' Complete equation
                wcfClient.Clear()

                Console.ReadLine()

                'Closing the client gracefully closes the connection and cleans up resources
                wcfClient.Close()

            Catch timeout As TimeoutException
                Console.WriteLine(timeout.Message)
                wcfClient.Abort()
            Catch commException As CommunicationException
                Console.WriteLine(commException.Message)
                wcfClient.Abort()
            End Try
        End Sub

    End Class

End Namespace

Sécurité

Voir aussi

Tâches

Comment : créer un contrat duplex
Comment : créer un client Windows Communication Foundation
Comment : utiliser la classe ChannelFactory

Concepts

Outil Service Model Metadata Tool (Svcutil.exe)

Autres ressources

Didacticiel de mise en route