ChannelFactory<TChannel> 类

定义

一个创建不同类型通道的工厂,客户端使用这些通道将消息发送到不同配置的服务终结点。

generic <typename TChannel>
public ref class ChannelFactory : System::ServiceModel::ChannelFactory, System::ServiceModel::Channels::IChannelFactory<TChannel>
public class ChannelFactory<TChannel> : System.ServiceModel.ChannelFactory, System.ServiceModel.Channels.IChannelFactory<TChannel>
type ChannelFactory<'Channel> = class
    inherit ChannelFactory
    interface IChannelFactory
    interface ICommunicationObject
    interface IChannelFactory<'Channel>
type ChannelFactory<'Channel> = class
    inherit ChannelFactory
    interface IChannelFactory<'Channel>
    interface IChannelFactory
    interface ICommunicationObject
Public Class ChannelFactory(Of TChannel)
Inherits ChannelFactory
Implements IChannelFactory(Of TChannel)

类型参数

TChannel

由通道工厂生成的通道类型。 此类型必须为 IOutputChannelIRequestChannel

继承
ChannelFactory<TChannel>
派生
实现

示例

下面的示例演示如何创建通道工厂并用它来创建和管理通道。

    BasicHttpBinding binding = new BasicHttpBinding();
    EndpointAddress address = new EndpointAddress("http://localhost:8000/ChannelApp");

    ChannelFactory<IRequestChannel> factory =
        new ChannelFactory<IRequestChannel>(binding, address);

    IRequestChannel channel = factory.CreateChannel();
    channel.Open();
    Message request = Message.CreateMessage(MessageVersion.Soap11, "hello");
    Message reply = channel.Request(request);
    Console.Out.WriteLine(reply.Headers.Action);
    reply.Close();
    channel.Close();
    factory.Close();
}

下面的代码示例演示如何在工厂创建通道对象前,以编程方式插入客户端行为。

public class Client
{
  public static void Main()
  {
    try
    {
      // Picks up configuration from the config file.
      ChannelFactory<ISampleServiceChannel> factory
        = new ChannelFactory<ISampleServiceChannel>("WSHttpBinding_ISampleService");

      // Add the client side behavior programmatically to all created channels.
      factory.Endpoint.Behaviors.Add(new EndpointBehaviorMessageInspector());

      ISampleServiceChannel wcfClientChannel = factory.CreateChannel();

      // Making calls.
      Console.WriteLine("Enter the greeting to send: ");
      string greeting = Console.ReadLine();
      Console.WriteLine("The service responded: " + wcfClientChannel.SampleMethod(greeting));

      Console.WriteLine("Press ENTER to exit:");
      Console.ReadLine();

      // Done with service.
      wcfClientChannel.Close();
      Console.WriteLine("Done!");
    }
    catch (TimeoutException timeProblem)
    {
      Console.WriteLine("The service operation timed out. " + timeProblem.Message);
      Console.Read();
    }
    catch (FaultException<SampleFault> fault)
    {
      Console.WriteLine("SampleFault fault occurred: {0}", fault.Detail.FaultMessage);
      Console.Read();
    }
    catch (CommunicationException commProblem)
    {
      Console.WriteLine("There was a communication problem. " + commProblem.Message);
      Console.Read();
    }
  }
Public Class Client
  Public Shared Sub Main()
    Try
      ' Picks up configuration from the config file.
      Dim factory As New ChannelFactory(Of ISampleServiceChannel)("WSHttpBinding_ISampleService")

      ' Add the client side behavior programmatically to all created channels.
      factory.Endpoint.Behaviors.Add(New EndpointBehaviorMessageInspector())

      Dim wcfClientChannel As ISampleServiceChannel = factory.CreateChannel()

      ' Making calls.
      Console.WriteLine("Enter the greeting to send: ")
            Dim greeting As String = Console.ReadLine()
      Console.WriteLine("The service responded: " & wcfClientChannel.SampleMethod(greeting))

      Console.WriteLine("Press ENTER to exit:")
      Console.ReadLine()

      ' Done with service. 
      wcfClientChannel.Close()
      Console.WriteLine("Done!")
    Catch timeProblem As TimeoutException
      Console.WriteLine("The service operation timed out. " & timeProblem.Message)
      Console.Read()
    Catch fault As FaultException(Of SampleFault)
      Console.WriteLine("SampleFault fault occurred: {0}", fault.Detail.FaultMessage)
      Console.Read()
    Catch commProblem As CommunicationException
      Console.WriteLine("There was a communication problem. " & commProblem.Message)
      Console.Read()
    End Try
  End Sub

注解

使用此泛型类可实现一些更高级的方案,在这些方案中有创建通道工厂(可用于创建多个通道类型)的要求。

以编程方式添加行为时,可以在创建任何通道之前将行为添加到 Behaviors 上相应的 ChannelFactory 属性。 有关代码示例,请参见“示例”部分。

频繁使用此类型的客户端或调用应用程序(例如,中层应用程序也是客户端应用程序)也具有复杂的状态管理需求和性能需求。 有关这些方案的详细信息,请参阅 中间层客户端应用程序

构造函数

ChannelFactory<TChannel>()

初始化 ChannelFactory<TChannel> 类的新实例。

ChannelFactory<TChannel>(Binding)

初始化 ChannelFactory<TChannel> 类的新实例。

ChannelFactory<TChannel>(Binding, EndpointAddress)

使用指定的绑定和终结点地址初始化 ChannelFactory<TChannel> 类的新实例。

ChannelFactory<TChannel>(Binding, String)

使用指定的绑定和远程地址初始化 ChannelFactory<TChannel> 类的新实例。

ChannelFactory<TChannel>(ServiceEndpoint)

使用指定的终结点初始化生成通道的 ChannelFactory<TChannel> 类的新实例。

ChannelFactory<TChannel>(String)

使用指定的终结点配置名称初始化 ChannelFactory<TChannel> 类的新实例。

ChannelFactory<TChannel>(String, EndpointAddress)

初始化 ChannelFactory<TChannel> 类的新实例,该类与终结点配置和远程地址的指定名称相关联。

ChannelFactory<TChannel>(Type)

初始化 ChannelFactory<TChannel> 类的新实例。

属性

Credentials

获取客户端在通过由工厂产生的通道与服务终结点进行通信时使用的凭据。

(继承自 ChannelFactory)
DefaultCloseTimeout

获取为完成关闭操作提供的默认时间间隔。

(继承自 ChannelFactory)
DefaultOpenTimeout

获取为完成打开操作提供的默认时间间隔。

(继承自 ChannelFactory)
Endpoint

获取由工厂产生的通道所要连接的服务终结点。

(继承自 ChannelFactory)
IsDisposed

获取一个值,该值指示通信对象是否已被释放。

(继承自 CommunicationObject)
State

获取指示通信对象当前状态的值。

(继承自 CommunicationObject)
ThisLock

获取在状态转换过程中保护类实例的相互排斥锁。

(继承自 CommunicationObject)

方法

Abort()

使通信对象立即从其当前状态转换到正在关闭状态。

(继承自 CommunicationObject)
ApplyConfiguration(String)

使用由指定配置文件提供的行为和通道工厂服务终结点中的那些行为来初始化通道工厂。

(继承自 ChannelFactory)
BeginClose(AsyncCallback, Object)

开始一个异步操作以关闭通信对象。

(继承自 CommunicationObject)
BeginClose(TimeSpan, AsyncCallback, Object)

开始一个异步操作以在指定超时内关闭通信对象。

(继承自 CommunicationObject)
BeginOpen(AsyncCallback, Object)

开始一个异步操作以打开通信对象。

(继承自 CommunicationObject)
BeginOpen(TimeSpan, AsyncCallback, Object)

开始一个异步操作以在指定时间间隔内打开通信对象。

(继承自 CommunicationObject)
Close()

使通信对象从其当前状态转换到关闭状态。

(继承自 CommunicationObject)
Close(TimeSpan)

使通信对象在指定时间间隔内从当前状态转换到关闭状态。

(继承自 CommunicationObject)
CreateChannel()

创建到指定终结点地址的指定类型的通道。

CreateChannel(Binding, EndpointAddress)

创建一个指定类型的通道,该通道用于将消息发送到用指定绑定进行配置的服务终结点。

CreateChannel(Binding, EndpointAddress, Uri)

创建一个指定类型的通道,该通道用于将消息发送到用指定绑定配置的指定传输地址处的服务终结点。

CreateChannel(EndpointAddress)

创建用于将消息发送到特定终结点地址的服务的通道。

CreateChannel(EndpointAddress, Uri)

创建一个通道,该通道用于通过指定的传输地址将消息发送到特定终结点地址的服务。

CreateChannel(String)

创建一个通道,该通道用于将消息发送到以指定方式配置其终结点的服务。

CreateChannelWithActAsToken(SecurityToken)

创建用于将消息发送到有作为安全令牌行为的服务的通道。

CreateChannelWithActAsToken(SecurityToken, EndpointAddress)

创建一个通道,该通道用于将消息发送到位于特定终结点地址的、具有一个作为安全令牌的行为的服务。

CreateChannelWithActAsToken(SecurityToken, EndpointAddress, Uri)

创建一个通道,该通道用于通过指定的传输地址将消息发送到位于特定终结点地址的、具有一个作为安全令牌的行为的服务。

CreateChannelWithIssuedToken(SecurityToken)

创建用于将消息发送到含有已发布安全令牌的服务的通道。

CreateChannelWithIssuedToken(SecurityToken, EndpointAddress)

创建一个通道,该通道用于将消息发送到位于特定终结点地址的、具有一个已发布的安全令牌的服务。

CreateChannelWithIssuedToken(SecurityToken, EndpointAddress, Uri)

创建一个通道,该通道用于通过指定的传输地址将消息发送到位于特定终结点地址的、具有一个已发布的安全令牌的服务。

CreateChannelWithOnBehalfOfToken(SecurityToken)

创建用于将消息发送到有代表安全令牌行为的服务的通道。

CreateChannelWithOnBehalfOfToken(SecurityToken, EndpointAddress)

创建用于将消息发送到特定终结点地址的服务的通道,该服务有安全令牌。

CreateChannelWithOnBehalfOfToken(SecurityToken, EndpointAddress, Uri)

创建一个通道,该通道用于通过指定的传输地址将消息发送到位于特定终结点地址的、代表安全令牌的服务。

CreateDescription()

创建服务终结点的说明。

CreateFactory()

为工厂的当前终结点生成通道工厂。

(继承自 ChannelFactory)
EndClose(IAsyncResult)

完成一个异步操作以关闭通信对象。

(继承自 CommunicationObject)
EndOpen(IAsyncResult)

完成一个异步操作以打开通信对象。

(继承自 CommunicationObject)
EnsureOpened()

打开尚未打开的当前通道工厂。

(继承自 ChannelFactory)
Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
Fault()

使通信对象从其当前状态转换到出错状态。

(继承自 CommunicationObject)
GetCommunicationObjectType()

获取通信对象的类型。

(继承自 CommunicationObject)
GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetProperty<T>()

从通道堆栈的适当层返回所请求的类型化对象,如果不存在,则返回 null

(继承自 ChannelFactory)
GetType()

获取当前实例的 Type

(继承自 Object)
InitializeEndpoint(Binding, EndpointAddress)

使用指定的绑定和地址初始化通道工厂的服务终结点。

(继承自 ChannelFactory)
InitializeEndpoint(ServiceEndpoint)

使用指定的终结点初始化通道工厂的服务终结点。

(继承自 ChannelFactory)
InitializeEndpoint(String, EndpointAddress)

使用指定的地址和配置初始化通道工厂的服务终结点。

(继承自 ChannelFactory)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
OnAbort()

终止当前通道工厂的内部通道工厂。

(继承自 ChannelFactory)
OnBeginClose(TimeSpan, AsyncCallback, Object)

对当前通道工厂(具有关联的状态对象)的内部通道工厂,开始一个异步关闭操作。

(继承自 ChannelFactory)
OnBeginOpen(TimeSpan, AsyncCallback, Object)

对当前通道工厂(具有关联的状态对象)的内部通道工厂,开始一个异步打开操作。

(继承自 ChannelFactory)
OnClose(TimeSpan)

使用完成操作的指定超时对内部通道工厂调用 close。

(继承自 ChannelFactory)
OnCloseAsync(TimeSpan)

一个创建不同类型通道的工厂,客户端使用这些通道将消息发送到不同配置的服务终结点。

(继承自 ChannelFactory)
OnClosed()

在通信对象转换到正在关闭状态的过程中被调用。

(继承自 CommunicationObject)
OnClosing()

在通信对象转换到正在关闭状态的过程中被调用。

(继承自 CommunicationObject)
OnEndClose(IAsyncResult)

对当前通道工厂的内部通道工厂,完成一个异步关闭操作。

(继承自 ChannelFactory)
OnEndOpen(IAsyncResult)

对当前通道工厂的内部通道工厂,完成一个异步打开操作。

(继承自 ChannelFactory)
OnFaulted()

在调用了同步错误操作,从而引起通信对象转换为出错状态的情况下,该方法插入对通信对象的处理。

(继承自 CommunicationObject)
OnOpen(TimeSpan)

使用完成操作的指定超时对当前通道工厂的内部通道工厂调用 open。

(继承自 ChannelFactory)
OnOpenAsync(TimeSpan)

一个创建不同类型通道的工厂,客户端使用这些通道将消息发送到不同配置的服务终结点。

(继承自 ChannelFactory)
OnOpened()

为通道工厂初始化 ClientCredentials 对象的一个只读副本。

(继承自 ChannelFactory)
OnOpening()

为当前的通道生成内部通道工厂。

(继承自 ChannelFactory)
Open()

使通信对象从已创建状态转换到已打开状态。

(继承自 CommunicationObject)
Open(TimeSpan)

使通信对象在指定时间间隔内从已创建状态转换到已打开状态。

(继承自 CommunicationObject)
ThrowIfDisposed()

如果通信对象已释放,则引发异常。

(继承自 CommunicationObject)
ThrowIfDisposedOrImmutable()

如果通信对象的 State 属性未设置为 Created 状态,则引发异常。

(继承自 CommunicationObject)
ThrowIfDisposedOrNotOpen()

如果通信对象未处于 Opened 状态,则引发异常。

(继承自 CommunicationObject)
ToString()

返回表示当前对象的字符串。

(继承自 Object)

事件

Closed

当通信对象转换到已关闭状态时发生。

(继承自 CommunicationObject)
Closing

当通信对象转换到正在关闭状态时发生。

(继承自 CommunicationObject)
Faulted

在通信对象转换到出错状态时发生。

(继承自 CommunicationObject)
Opened

当通信对象转换到已打开状态时发生。

(继承自 CommunicationObject)
Opening

当通信对象转换到正在打开状态时发生。

(继承自 CommunicationObject)

显式接口实现

IAsyncCommunicationObject.CloseAsync(TimeSpan)

一个创建不同类型通道的工厂,客户端使用这些通道将消息发送到不同配置的服务终结点。

(继承自 CommunicationObject)
IAsyncCommunicationObject.OpenAsync(TimeSpan)

一个创建不同类型通道的工厂,客户端使用这些通道将消息发送到不同配置的服务终结点。

(继承自 CommunicationObject)
IAsyncDisposable.DisposeAsync()

一个创建不同类型通道的工厂,客户端使用这些通道将消息发送到不同配置的服务终结点。

(继承自 ChannelFactory)
IDisposable.Dispose()

关闭当前的通道工厂。

(继承自 ChannelFactory)

扩展方法

CloseHelperAsync(ICommunicationObject, TimeSpan)

一个创建不同类型通道的工厂,客户端使用这些通道将消息发送到不同配置的服务终结点。

OpenHelperAsync(ICommunicationObject, TimeSpan)

一个创建不同类型通道的工厂,客户端使用这些通道将消息发送到不同配置的服务终结点。

GetInternalCloseTimeout(CommunicationObject)

一个创建不同类型通道的工厂,客户端使用这些通道将消息发送到不同配置的服务终结点。

适用于

线程安全性

此类型是线程安全的。