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<'Channel>
    interface IChannelFactory
    interface ICommunicationObject
type ChannelFactory<'Channel> = class
    inherit ChannelFactory
    interface IChannelFactory
    interface ICommunicationObject
    interface IChannelFactory<'Channel>
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

注解

此泛型类支持更高级的方案,其中需要创建可用于创建多个类型的通道的通道工厂。

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

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

构造函数

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)

调用在内部通道工厂上关闭,并指定超时以完成操作。

(继承自 ChannelFactory)
OnClosed()

在将通信对象转换为结束状态期间调用。

(继承自 CommunicationObject)
OnClosing()

在将通信对象转换为结束状态期间调用。

(继承自 CommunicationObject)
OnEndClose(IAsyncResult)

在当前通道工厂的内部通道工厂上完成异步关闭操作。

(继承自 ChannelFactory)
OnEndOpen(IAsyncResult)

在当前通道工厂的内部通道工厂上完成异步打开操作。

(继承自 ChannelFactory)
OnFaulted()

在通信对象由于调用同步故障操作而转换为错误状态后,在通信对象上插入处理。

(继承自 CommunicationObject)
OnOpen(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)

显式接口实现

IAsyncDisposable.DisposeAsync()

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

(继承自 ChannelFactory)
IDisposable.Dispose()

关闭当前通道工厂。

(继承自 ChannelFactory)

扩展方法

ConfigureAwait(IAsyncDisposable, Boolean)

配置如何执行从异步可释放项返回的任务的 await。

适用于

线程安全性

此类型是线程安全的。