Condividi tramite


Procedura: accedere ai servizi con un contratto duplex

Una funzionalità di Windows Communication Foundation (WCF) è la possibilità di creare un servizio che utilizza un modello di messaggistica duplex. Questo modello consente a un servizio di comunicare con il client tramite un callback. In questo argomento vengono illustrati i passaggi per creare un client WCF in una classe client che implementa l'interfaccia di callback.

Un'associazione duale espone l'indirizzo IP del client al servizio. Nel client è necessario implementare un meccanismo di sicurezza in grado di garantire che il client si connetta solo a servizi ritenuti attendibili.

Per un'esercitazione sulla creazione di servizi e client WCF di base, vedere Esercitazione introduttiva.

Per accedere a un servizio duplex

  1. Creare un servizio che contiene due interfacce. La prima interfaccia è per il servizio, la seconda è per il callback. Per ulteriori informazioni su sulla creazione di un servizio duplex, vedere Procedura: creare un contratto duplex.

  2. Eseguire il servizio.

  3. Utilizzare lo Strumento ServiceModel Metadata Utility Tool (Svcutil.exe) per generare contratti (interfacce) per il client. Per informazioni su tale procedura, vedere Procedura: creare un client di Windows Communication Foundation.

  4. Implementare l'interfaccia di callback nella classe client, come illustrato nell'esempio seguente.

    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. Creare un'istanza della classe InstanceContext. Il costruttore richiede un'istanza della classe client.

    InstanceContext site = new InstanceContext(new CallbackHandler());
    
    Dim site As InstanceContext = New InstanceContext(new CallbackHandler())
    
  6. Creare un'istanza del client WCF utilizzando il costruttore che richiede un oggetto InstanceContext. Il secondo parametro del costruttore è il nome di un endpoint contenuto nel file di configurazione.

    CalculatorDuplexClient wcfClient = 
    new CalculatorDuplexClient(site, "default")
    
    Dim wcfClient As New CalculatorDuplexClient(site, "default")
    
  7. Chiamare i metodi del client WCF secondo le esigenze.

Esempio

Nell'esempio di codice seguente viene descritto come creare una classe client che accede a un contratto 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

Sicurezza

Vedere anche

Attività

Procedura: creare un contratto duplex
Procedura: creare un client di Windows Communication Foundation
Procedura: utilizzare ChannelFactory

Concetti

Strumento ServiceModel Metadata Utility Tool (Svcutil.exe)

Altre risorse

Esercitazione introduttiva