Клиентская архитектураClient Architecture

Приложения используют объекты клиента Windows Communication Foundation (WCF) для вызова операций службы.Applications use Windows Communication Foundation (WCF) client objects to invoke service operations. В этом разделе рассматриваются объектов клиента WCF, каналы клиента WCF и их связи с базовой архитектурой каналов.This topic discusses WCF client objects, WCF client channels, and their relationships to the underlying channel architecture. Общий обзор объектов клиента WCF, см. в разделе WCF Client Overview.For a basic overview of WCF client objects, see WCF Client Overview. Дополнительные сведения о уровень канала, см. в разделе расширение уровня каналов.For more information about the channel layer, see Extending the Channel Layer.

ОбзорOverview

Время выполнения модели службы создает клиентов WCF, которые состоят из следующих:The service model run time creates WCF clients, which are composed of the following:

  • Автоматически созданная реализация клиента контракта службы, направляющая вызовы из кода приложения в исходящие сообщения, а также направляющая ответные сообщения в параметры вывода и возвращаемые значения, которые приложение может получать.An automatically generated client implementation of a service contract, which turns calls from your application code into outgoing messages, and turns response messages into output parameters and return values that your application can retrieve.

  • Реализация интерфейса управления (System.ServiceModel.IClientChannel), который объединяет различные интерфейсы и обеспечивает доступ к функциям управления, наиболее важной из которых является способность закрыть сеанс клиента и удалить канал.An implementation of a control interface (System.ServiceModel.IClientChannel) that groups together various interfaces and provides access to control functionality, most notably the ability to close the client session and dispose the channel.

  • Клиентский канал, созданный на основе параметров конфигурации, определенных использованной привязкой.A client channel that is built based on the configuration settings specified by the used binding.

Приложения могут создавать таких клиентов по требованию, либо с помощью System.ServiceModel.ChannelFactory или путем создания экземпляра ClientBase<TChannel> производного класса, так как оно генерируется ServiceModel Metadata Utility Tool (Svcutil.exe).Applications can create such clients on demand, either through a System.ServiceModel.ChannelFactory or by creating an instance of a ClientBase<TChannel> derived class as it is generated by the ServiceModel Metadata Utility Tool (Svcutil.exe). Эти созданные клиентские классы осуществляют инкапсуляцию и делегирование в реализацию клиентского канала, которая динамически создается фабрикой ChannelFactory.These ready-built client classes encapsulate and delegate to a client channel implementation that is dynamically constructed by a ChannelFactory. Следовательно, наибольший интерес для данного обсуждения представляют клиентские каналы и создающая их фабрика каналов.Therefore, the client channel and the channel factory that produces them are the focal point of interest for this discussion.

Клиентские объекты и клиентские каналыClient Objects and Client Channels

Является базовым интерфейсом клиентов WCF System.ServiceModel.IClientChannel интерфейс, который предоставляет основные функциональные возможности клиента, а также базовые функции коммуникационных объектов System.ServiceModel.ICommunicationObject, контекстные функции канала System.ServiceModel.IContextChannelи расширяемое поведение объекта System.ServiceModel.IExtensibleObject<T>.The base interface of WCF clients is the System.ServiceModel.IClientChannel interface, which exposes core client functionality as well as the basic communication object functionality of System.ServiceModel.ICommunicationObject, the context functionality of System.ServiceModel.IContextChannel, and the extensible behavior of System.ServiceModel.IExtensibleObject<T>.

Интерфейс IClientChannel, однако, не определяет сам контракт службы.The IClientChannel interface, however, does not define a service contract itself. Они объявляются интерфейсом контракта службы (обычно создается из метаданных службы с помощью такого средства, как ServiceModel Metadata Utility Tool (Svcutil.exe)).Those are declared by the service contract interface (typically generated from service metadata using a tool like the ServiceModel Metadata Utility Tool (Svcutil.exe)). Типы клиентов WCF расширяют как IClientChannel и целевой интерфейс контракта службы, чтобы приложения могли вызывать операции непосредственно, а также иметь доступ к функциям среды выполнения на стороне клиента.WCF client types extend both IClientChannel and the target service contract interface to enable applications to call operations directly and also have access to client-side run-time functionality. Создание клиента WCF предоставляет WCFSystem.ServiceModel.ChannelFactory объектов с сведения, необходимые для создания среды выполнения, которые могут подключаться и взаимодействовать с конечной точкой настроенной службы.Creating an WCF client provides WCFSystem.ServiceModel.ChannelFactory objects with the information necessary to create a run time that can connect and interact with the configured service endpoint.

Как упоминалось ранее, необходимо настроить два типа клиентов WCF, чтобы вы могли использовать их.As mentioned earlier, the two WCF client types must be configured before you can use them. Наиболее простыми типами клиента WCF являются объектами, которые являются производными от ClientBase<TChannel> (или DuplexClientBase<TChannel> Если контракт службы является дуплексный контракт).The simplest WCF client types are objects that derive from ClientBase<TChannel> (or DuplexClientBase<TChannel> if the service contract is a duplex contract). Эти типы можно создать с помощью программно настроенного конструктора или с использованием файла конфигурации и затем вызывать непосредственно для запуска операций службы.You can create these types by using a constructor, configured programmatically, or by using a configuration file, and then called directly to invoke service operations. Для получения общих сведений о ClientBase<TChannel> объектов, см. в разделе WCF Client Overview.For a basic overview of ClientBase<TChannel> objects, see WCF Client Overview.

Второй тип создается во время выполнения в результате вызова метода CreateChannel.The second type is generated at run time from a call to the CreateChannel method. Приложения, которым требуется жесткий контроль особенностей взаимодействия обычно использовать этот тип клиента, называемый объекте канала клиента, так как она допускает более непосредственное взаимодействие от базовой среды выполнения клиента и канала система.Applications concerned with tight control of the communication specifics typically use this client type, called a client channel object, because it enables more direct interaction than the underlying client run-time and channel system.

Фабрики каналовChannel Factories

За создание базовой среды выполнения, которая поддерживает вызовы клиентов, отвечает класс System.ServiceModel.ChannelFactory<TChannel>.The class that is responsible for creating the underlying run time that supports client invocations is the System.ServiceModel.ChannelFactory<TChannel> class. Объектов клиента WCF и клиент WCF канала использование объектов ChannelFactory<TChannel> объект для создания экземпляров; ClientBase<TChannel> клиентский объект, унаследованный инкапсулирует обработку фабрики каналов, но в ряде сценариев полностью подходит для использования Фабрика каналов, напрямую.Both WCF client objects and WCF client channel objects use a ChannelFactory<TChannel> object to create instances; the ClientBase<TChannel> derived client object encapsulates the handling of the channel factory, but for a number of scenarios it is perfectly reasonable to use the channel factory directly. Распространенный сценарий для этого - необходимость многократного создания новых клиентских каналов из существующей фабрики.The common scenario for this is if you want to repeatedly create new client channels from an existing factory. Если вы используете объект клиента, можно получить фабрику выделенного канала из объекта клиента WCF, вызвав ClientBase<TChannel>.ChannelFactory свойство.If you are using a client object, you can obtain the underlying channel factory from a WCF client object by calling the ClientBase<TChannel>.ChannelFactory property.

В отношении фабрик каналов необходимо иметь в виду, что они создают новые экземпляры клиентских каналов для предоставленной им конфигурации до вызова метода ChannelFactory<TChannel>.CreateChannel.The important thing to remember about channel factories is that they create new instances of client channels for the configuration provided to them prior to calling ChannelFactory<TChannel>.CreateChannel. При вызове метода CreateChannel (или ClientBase<TChannel>.Open, ClientBase<TChannel>.CreateChannel, либо любая операция для объекта клиента WCF), нельзя изменить фабрику каналов и надеяться на получение каналов к различным экземплярам службы, даже если простого изменения целевого адреса конечной точки.Once you call CreateChannel (or ClientBase<TChannel>.Open, ClientBase<TChannel>.CreateChannel, or any operation on a WCF client object), you cannot modify the channel factory and expect to get channels to different service instances, even if you are merely changing the target endpoint address. Если требуется создать клиентский объект или клиентский канал с другой конфигурацией, сначала необходимо создать новую фабрику каналов.If you want to create a client object or client channel with a different configuration, you must create a new channel factory first.

Дополнительные сведения о различных проблем, с помощью объектов клиента WCF и клиентских каналов WCF, см. в разделе доступ к службам, с помощью клиента WCF.For more information about various issues using WCF client objects and WCF client channels, see Accessing Services Using a WCF Client.

В следующих двух разделах Создание и использование объектов клиентских каналов WCF.The following two sections describe the creation and use of WCF client channel objects.

Создание нового объекта клиентского канала WCFCreating a New WCF Client Channel Object

Чтобы продемонстрировать использование клиентского канала, предположим, что создан следующий контракт службы.To illustrate the use of a client channel, assume the following service contract has been generated.

[System.ServiceModel.ServiceContractAttribute(
  Namespace = "http://microsoft.wcf.documentation"
)]
public interface ISampleService
{
    [System.ServiceModel.OperationContractAttribute(
      Action = "http://microsoft.wcf.documentation/ISampleService/SampleMethod",
      ReplyAction = "http://microsoft.wcf.documentation/ISampleService/SampleMethodResponse"
    )]
    [System.ServiceModel.FaultContractAttribute(
      typeof(microsoft.wcf.documentation.SampleFault),
      Action = "http://microsoft.wcf.documentation/ISampleService/SampleMethodSampleFaultFault"
    )]
    string SampleMethod(string msg);
}

Для подключения к службе ISampleService используйте созданный интерфейс контракта непосредственно с фабрикой каналов (ChannelFactory<TChannel>).To connect to an ISampleService service, use the generated contract interface directly with a channel factory (ChannelFactory<TChannel>). При создании и настройке фабрики каналов для конкретного контракта можно вызвать метод CreateChannel для возврата объектов клиентских каналов, которые можно использовать для взаимодействия со службой ISampleService.Once you create and configure a channel factory for a particular contract, you can call the CreateChannel method to return client channel objects that you can use to communicate with an ISampleService service.

При использовании класса ChannelFactory<TChannel> с интерфейсом контракта службы следует перейти к интерфейсу IClientChannel , чтобы явно открыть, закрыть канал или прервать его работу.When using the ChannelFactory<TChannel> class with a service contract interface, you must cast to the IClientChannel interface to explicitly open, close, or abort the channel. Для упрощения работы средство Svcutil.exe создает также вспомогательный интерфейс, реализующий и интерфейс контракта службы, и интерфейс IClientChannel , чтобы можно было взаимодействовать с инфраструктурой клиентских каналов без переходов.To make it easier to work with, the Svcutil.exe tool also generates a helper interface that implements both the service contract interface and IClientChannel to enable you to interact with the client channel infrastructure without having to cast. В следующем коде показано определение вспомогательного клиентского канала, который реализует указанный выше контракт службы.The following code shows the definition of a helper client channel that implements the preceding service contract.

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public interface ISampleServiceChannel : ISampleService, System.ServiceModel.IClientChannel
{
}

Создание нового объекта клиентского канала WCFCreating a New WCF Client Channel Object

Чтобы воспользоваться клиентским каналом для подключения к службе ISampleService, используйте созданный интерфейс контракта (или вспомогательный вариант) непосредственно с фабрикой каналов, передав тип интерфейса контракта в качестве параметра типа.To use a client channel to connect to an ISampleService service, use the generated contract interface (or the helper version) directly with a channel factory, passing the type of the contract interface as the type parameter. После создания и настройки фабрики каналов для конкретного контракта можно вызвать метод ChannelFactory<TChannel>.CreateChannel для возврата объектов клиентских каналов, которые можно использовать для взаимодействия со службой ISampleService.Once a channel factory for a particular contract has been created and configured, you can call the ChannelFactory<TChannel>.CreateChannel method to return client channel objects that you can use to communicate with an ISampleService service.

Созданные объекты клиентских каналов реализуют интерфейс IClientChannel и интерфейс контракта.When created, the client channel objects implement IClientChannel and the contract interface. Следовательно, их можно использовать непосредственно для вызова операций, взаимодействующих со службой, поддерживающей этот контракт.Therefore, you can use them directly to call operations that interact with a service that supports that contract.

Различие между применением клиентских объектов и объектов клиентских каналов состоит только в управлении и удобстве использования для разработчиков.The difference between using client objects and client channel objects is merely one of control and ease of use for developers. Многие разработчики, которым удобно работать с классами и объектами предпочтут использовать клиентский объект WCF вместо клиентского канала WCF.Many developers who are comfortable working with classes and objects will prefer to use the WCF client object instead of the WCF client channel.

Пример см. в статье Практическое руководство. Использование ChannelFactory.For an example, see How to: Use the ChannelFactory.