次の方法で共有


方法 : ChannelFactory を使用する

ChannelFactory ジェネリック クラスは、複数チャネルの作成に使用できるチャネル ファクトリの作成を必要とする高度なシナリオで使用します。

ChannelFactory クラスの作成方法と使用方法

  1. Windows Communication Foundation (WCF) サービスをビルドして実行します。詳細については、次のトピックを参照してください。、「サービスの設計と実装」、「サービスの構成」、および「ホスティング サービス」を参照してください。

  2. クライアントのコントラクト (インターフェイス) を生成するには、ServiceModel メタデータ ユーティリティ ツール (Svcutil.exe) を使用します。

  3. クライアント コード内で、ChannelFactory クラスを使用して複数のエンドポイント リスナーを作成します。

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();
    }
}