클라이언트 아키텍처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 유틸리티 도구 (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 유틸리티 도구 (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를 제공 하는 WCF 클라이언트 만들기System.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.

새 WCF 클라이언트 채널 개체 만들기Creating 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
{
}

새 WCF 클라이언트 채널 개체 만들기Creating 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.