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

Тип канала, создаваемого фабрикой каналов. Этот тип должен быть либо IOutputChannel, либо IRequestChannel.

Наследование
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()

Вызывает переход объекта связи из текущего состояния в состояние Closed.

(Унаследовано от CommunicationObject)
Close(TimeSpan)

Вызывает переход объекта связи из его текущего состояния в состояние Closed в течение заданного интервала времени.

(Унаследовано от 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()

Вызывает переход объекта связи из текущего состояния в состояние Faulted.

(Унаследовано от 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()

Вставляет операцию обработки объекта связи после перехода объекта в состояние Faulted в связи с вызовом синхронной операции ошибки.

(Унаследовано от CommunicationObject)
OnOpen(TimeSpan)

Вызывает операцию открытия в фабрике внутренних каналов текущей фабрики каналов с заданным временем ожидания для завершения операции.

(Унаследовано от ChannelFactory)
OnOpened()

Инициализирует доступную только для чтения копию объекта ClientCredentials для фабрики каналов.

(Унаследовано от ChannelFactory)
OnOpening()

Создает фабрику внутренних каналов для текущего канала.

(Унаследовано от ChannelFactory)
Open()

Вызывает переход объекта связи из состояния Created в состояние Opened.

(Унаследовано от CommunicationObject)
Open(TimeSpan)

Вызывает переход объекта связи из состояния Created в состояние Opened в течение заданного интервала времени.

(Унаследовано от CommunicationObject)
ThrowIfDisposed()

Вызывает исключение, если объект связи удален.

(Унаследовано от CommunicationObject)
ThrowIfDisposedOrImmutable()

Создает исключение, если для свойства объекта связи State не установлено значение Created.

(Унаследовано от CommunicationObject)
ThrowIfDisposedOrNotOpen()

Создает исключение, если объект связи не находится в состоянии Opened.

(Унаследовано от CommunicationObject)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

События

Closed

Происходит при переходе объекта связи в состояние Closed.

(Унаследовано от CommunicationObject)
Closing

Происходит при переходе объекта связи в состояние закрытия.

(Унаследовано от CommunicationObject)
Faulted

Происходит при переходе объекта связи в состояние Faulted.

(Унаследовано от CommunicationObject)
Opened

Происходит при переходе объекта связи в состояние Opened.

(Унаследовано от CommunicationObject)
Opening

Происходит при переходе объекта связи в состояние открытия.

(Унаследовано от CommunicationObject)

Явные реализации интерфейса

IDisposable.Dispose()

Закрывает текущую фабрику каналов.

(Унаследовано от ChannelFactory)

Применяется к

Потокобезопасность

Данный тип потокобезопасен.