Condividi tramite


Procedura: utilizzare ChannelFactory

La classe generica ChannelFactory viene utilizzata in scenari avanzati che richiedono la creazione di una channel factory utilizzabile per creare più di un canale.

Per creare e utilizzare la classe ChannelFactory

  1. Creare ed eseguire un servizio Windows Communication Foundation (WCF). Per ulteriori informazioni, vedere Progettazione e implementazione di servizi, Configurazione dei servizi e Servizi host.

  2. Utilizzare lo Strumento ServiceModel Metadata Utility Tool (Svcutil.exe) per generare il contratto (interfaccia) per il client.

  3. Nel codice client, utilizzare la classe ChannelFactory per creare più listener endpoint.

Esempio

Imports System
Imports System.ServiceModel

' This code generated by svcutil.exe.
<ServiceContract()>  _
Interface IMath
    <OperationContract()>  _
    Function Add(ByVal A As Double, ByVal B As Double) As Double 
End Interface 

public class Math
    Implements IMath

    Function Add(ByVal A As Double, ByVal B As Double) As Double Implements IMath.Add
       Return A + B
    End Function
End Class

Public Class Test
    Public Shared Sub Main()
    End Sub

    Public Sub Run()
        ' This code is written by an application developer.
        ' Create a channel factory.
        Dim myBinding As New BasicHttpBinding
    Dim myEndpoint As New EndpointAddress("https://localhost/MathService/Ep1")

        Dim myChannelFactory As ChannelFactory(Of IMath) = _
        New ChannelFactory(Of IMath) (myBinding, myEndpoint) 

        'Create a channel.
        Dim wcfClient1 As IMath = myChannelFactory.CreateChannel()
        Dim s As Integer = wcfClient1.Add(3, 39)
        Console.WriteLine(s.ToString())
    Dim clientChannel As IClientChannel = CType(wcfClient1, IClientChannel)
        clientChannel.Close()

        ' Create another channel
        Dim wcfClient2 As IMath = myChannelFactory.CreateChannel()
        s = wcfClient2.Add(15, 27)
        Console.WriteLine(s.ToString())
    clientChannel = CType(wcfClient2, IClientChannel)
        clientChannel.Close()
    myChannelFactory.Close()
    End Sub
End Class
using System;
using System.ServiceModel;

// This code generated by svcutil.exe.
[ServiceContract()]
interface IMath
{
    [OperationContract()]
     double Add(double A, double B);
}

public class Math : IMath
{
    public double Add(double A, double B) 
    {
        return A + B;
    }
}

public sealed class Test
{
    static void Main()
    {
        // Code not shown.
    }

    public void Run()
    {
        // This code is written by an application developer.
        // Create a channel factory.
        BasicHttpBinding myBinding = new BasicHttpBinding();
    
        EndpointAddress myEndpoint = new EndpointAddress("https://localhost/MathService/Ep1");

        ChannelFactory<IMath> myChannelFactory = new ChannelFactory<IMath>(myBinding, myEndpoint);

        // Create a channel.
        IMath wcfClient1 = myChannelFactory.CreateChannel();
        double s = wcfClient1.Add(3, 39);
        Console.WriteLine(s.ToString());
    ((IClientChannel)wcfClient1).Close();

        // Create another channel.
        IMath wcfClient2 = myChannelFactory.CreateChannel();
        s = wcfClient2.Add(15, 27);
        Console.WriteLine(s.ToString());
    ((IClientChannel)wcfClient2).Close();
    myChannelFactory.Close();
    }
}