如何:使用 ChannelFactory
ChannelFactory 泛型类用于某些高级方案中,这些方案要求创建可用于创建多个通道的通道工厂。
创建和使用 ChannelFactory 类
生成并运行一个 Windows Communication Foundation (WCF) 服务。有关更多信息,请参见 设计和实现服务、配置服务 和 承载服务。
使用 ServiceModel 元数据实用工具 (Svcutil.exe) 生成客户端协定(接口)。
在客户端代码中,使用 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();
}
}