ChannelFactory 类

定义

创建和管理客户端用于将消息发送到服务终结点的通道。

public ref class ChannelFactory abstract : System::ServiceModel::Channels::CommunicationObject, IDisposable, System::ServiceModel::Channels::IChannelFactory
public ref class ChannelFactory abstract : System::ServiceModel::Channels::CommunicationObject, IAsyncDisposable, IDisposable, System::ServiceModel::Channels::IChannelFactory
public abstract class ChannelFactory : System.ServiceModel.Channels.CommunicationObject, IDisposable, System.ServiceModel.Channels.IChannelFactory
public abstract class ChannelFactory : System.ServiceModel.Channels.CommunicationObject, IAsyncDisposable, IDisposable, System.ServiceModel.Channels.IChannelFactory
type ChannelFactory = class
    inherit CommunicationObject
    interface IDisposable
    interface IChannelFactory
    interface ICommunicationObject
type ChannelFactory = class
    inherit CommunicationObject
    interface IDisposable
    interface IChannelFactory
    interface ICommunicationObject
    interface IAsyncDisposable
type ChannelFactory = class
    inherit CommunicationObject
    interface IChannelFactory
    interface ICommunicationObject
    interface IDisposable
Public MustInherit Class ChannelFactory
Inherits CommunicationObject
Implements IChannelFactory, IDisposable
Public MustInherit Class ChannelFactory
Inherits CommunicationObject
Implements IAsyncDisposable, IChannelFactory, IDisposable
继承
ChannelFactory
派生
实现

示例

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

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

注解

实现 IChannelFactory 接口及其关联通道的通道工厂通常由通信模式的发起方使用。 实现 IChannelListener 接口及其关联侦听器的侦听器工厂提供通信通道接受的机制。

此类不是通道模型的一部分,而是服务模型。 CreateFactory 方法提供了为服务终结点创建 IChannelFactory 的方法。 使用它来构造一个客户端,该客户端在不使用元数据或策略的情况下连接到服务上的接口协定。

注意

ChannelFactory.Credentials.Windows.AllowedImpersonationLevel 设置为 TokenImpersonationLevel.Anonymous 始终会导致匿名登录,而不考虑模拟级别。

从此类派生的托管C++用户的特殊说明:

  • 将清理代码置于 (On)(Begin)Close(and/或 OnAbort),而不是析构函数中。

  • 避免析构函数;它们会导致编译器自动生成 IDisposable

  • 避免非引用成员;它们可能导致编译器自动生成 IDisposable

  • 避免使用终结器;但是,如果包含生成警告,则应禁止生成警告并调用 SuppressFinalize(Object) 和终结器本身(On)(Begin)Close(和/或 OnAbort)来模拟自动生成 IDisposable 行为是什么。

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

构造函数

ChannelFactory()

初始化 ChannelFactory 类的新实例。

属性

Credentials

获取客户端用来通过工厂生成的通道进行通信服务终结点的凭据。

DefaultCloseTimeout

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

DefaultOpenTimeout

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

Endpoint

获取工厂所生成的通道连接到的服务终结点。

IsDisposed

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

(继承自 CommunicationObject)
State

获取一个值,该值指示通信对象的当前状态。

(继承自 CommunicationObject)
ThisLock

获取在状态转换期间保护类实例的互斥锁。

(继承自 CommunicationObject)

方法

Abort()

使通信对象立即从其当前状态转换为结束状态。

(继承自 CommunicationObject)
ApplyConfiguration(String)

使用指定配置文件提供的行为以及通道工厂的服务终结点中的行为初始化通道工厂。

BeginClose(AsyncCallback, Object)

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

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

开始异步操作以关闭具有指定超时的通信对象。

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

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

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

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

(继承自 CommunicationObject)
Close()

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

(继承自 CommunicationObject)
Close(TimeSpan)

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

(继承自 CommunicationObject)
CreateDescription()

在派生类中实现时,创建与通道工厂关联的服务终结点的说明。

CreateFactory()

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

EndClose(IAsyncResult)

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

(继承自 CommunicationObject)
EndOpen(IAsyncResult)

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

(继承自 CommunicationObject)
EnsureOpened()

打开当前通道工厂(如果尚未打开)。

Equals(Object)

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

(继承自 Object)
Fault()

使通信对象从其当前状态过渡到错误状态。

(继承自 CommunicationObject)
GetCommunicationObjectType()

获取通信对象的类型。

(继承自 CommunicationObject)
GetHashCode()

用作默认哈希函数。

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

从通道堆栈中的相应层返回所请求的类型化对象;如果不存在,则返回 null( 如果不存在)。

GetType()

获取当前实例的 Type

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

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

InitializeEndpoint(ServiceEndpoint)

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

InitializeEndpoint(String, EndpointAddress)

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

MemberwiseClone()

创建当前 Object的浅表副本。

(继承自 Object)
OnAbort()

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

OnBeginClose(TimeSpan, AsyncCallback, Object)

对当前通道工厂的内部通道工厂开始异步关闭操作,该工厂具有与之关联的状态对象。

OnBeginOpen(TimeSpan, AsyncCallback, Object)

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

OnClose(TimeSpan)

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

OnClosed()

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

(继承自 CommunicationObject)
OnClosing()

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

(继承自 CommunicationObject)
OnEndClose(IAsyncResult)

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

OnEndOpen(IAsyncResult)

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

OnFaulted()

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

(继承自 CommunicationObject)
OnOpen(TimeSpan)

调用在当前通道工厂的内部通道工厂上打开,并指定超时以完成操作。

OnOpened()

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

OnOpening()

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

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

创建和管理客户端用于将消息发送到服务终结点的通道。

IDisposable.Dispose()

关闭当前通道工厂。

扩展方法

ConfigureAwait(IAsyncDisposable, Boolean)

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

适用于