바인딩 및 바인딩 요소(각각 System.ServiceModel.Channels.Binding 및 System.ServiceModel.Channels.BindingElement 개체를 확장하는)는, WCF(Windows Communication Foundation) 애플리케이션 모델이 채널 팩터리 및 채널 수신기와 연결되는 지점입니다. 바인딩이 없으면 사용자 지정 채널을 사용하려면 서비스 Channel-Level 프로그래밍 및 클라이언트 Channel-Level 프로그래밍에 설명된 대로 채널 수준에서 프로그래밍해야 합니다. 이 주제에서는 WCF에서 채널 사용을 가능하게 하는 최소 요구 사항, 채널 개발을 위한 BindingElement 개발, 그리고 애플리케이션에서 사용을 가능하게 설정하는 방법에 대해 설명합니다. 이는 '채널 개발'의 4단계에 설명된 내용입니다.
개요
채널을 위한 BindingElement을(를) 만들면 개발자가 WCF 애플리케이션에서 이를 사용할 수 있습니다. BindingElement 클래스에서 개체를 사용하여 채널의 System.ServiceModel.ServiceHost 정확한 형식 정보를 사용하지 않고도 WCF 애플리케이션을 채널에 연결할 수 있습니다.
BindingElement 만든 후에는 채널 개발에 설명된 나머지 채널 개발 단계에 따라 요구 사항에 따라 더 많은 기능을 사용하도록 설정할 수 있습니다.
Binding 요소 추가
사용자 지정 BindingElement을 구현하려면 BindingElement에서 상속하는 클래스를 작성합니다. 예를 들어, 대형 메시지를 청크로 분할하고 다른 쪽에서 다시 조립할 수 있는 ChunkingChannel
을 개발한 경우, BindingElement을 구현하고 해당 바인딩을 사용하도록 구성하여 모든 바인딩에서 이 채널을 사용할 수 있습니다. 이 항목의 나머지 부분에서는 이 예제를 사용하여 ChunkingChannel
바인딩 요소 구현 요구 사항을 보여 줍니다.
ChunkingBindingElement
는 ChunkingChannelFactory
와 ChunkingChannelListener
를 만드는 역할을 담당합니다.
CanBuildChannelFactory 및 CanBuildChannelListener 구현을 재정의하고, 형식 매개 변수가 IDuplexSessionChannel인지 확인합니다 (이 예에서는 ChunkingChannel
에 의해 지원되는 유일한 채널 형식입니다). 그리고 바인딩에 있는 다른 바인딩 요소들이 이 채널 형식을 지원하는지 확인합니다.
BuildChannelFactory 먼저 요청된 채널 셰이프를 작성할 수 있는지 확인한 다음 청크 분할할 메시지 작업 목록을 가져옵니다. 그런 다음 새 ChunkingChannelFactory
채널을 만들어 내부 채널 팩터리에 전달합니다. (전송 바인딩 요소를 만드는 경우 해당 요소는 바인딩 스택의 마지막 요소이므로 채널 수신기 또는 채널 팩터리를 만들어야 합니다.)
BuildChannelListener에서도 ChunkingChannelListener
를 만들어 내부 채널 수신기에 전달하는 구현 방법이 비슷합니다.
전송 채널을 사용하는 또 다른 예로 전송: UDP 샘플은 다음 재정의를 제공합니다.
샘플에서 바인딩 요소는 UdpTransportBindingElement
로, 이는 TransportBindingElement로부터 파생됩니다. 이를 통해 채널과 관련된 팩터리를 빌드하기 위해 다음 메서드들을 재정의합니다.
public IChannelFactory<TChannel> BuildChannelFactory<TChannel>(BindingContext context)
{
return (IChannelFactory<TChannel>)(object)new UdpChannelFactory(this, context);
}
public IChannelListener<TChannel> BuildChannelListener<TChannel>(BindingContext context)
{
return (IChannelListener<TChannel>)(object)new UdpChannelListener(this, context);
}
또한 BindingElement
을(를) 복제하고 구성표(soap.udp)를 반환하기 위한 멤버도 포함합니다.
프로토콜 바인딩 요소
새 바인딩 요소는 포함된 바인딩 요소를 대체하거나 보강하여 새 전송, 인코딩 또는 상위 수준 프로토콜을 추가할 수 있습니다. 새 프로토콜 바인딩 요소를 만들려면 먼저 클래스를 확장합니다 BindingElement . 최소한 BindingElement.Clone을 사용하여 ChannelProtectionRequirements
와 IChannel.GetProperty를 구현해야 합니다. 이 바인딩 요소에 ChannelProtectionRequirements 대한 값을 반환합니다. 자세한 내용은 ChannelProtectionRequirements를 참조하세요.
Clone 는 이 바인딩 요소의 새 복사본을 반환해야 합니다. 최적의 관행으로, 우리는 바인딩 요소 작성자가 기본 복사 생성자를 호출하는 복사 생성자를 사용하여 Clone를 구현한 후, 이 클래스의 추가 필드를 복제하는 것을 권장합니다.
전송 바인딩 구성 요소
새 전송 바인딩 요소를 만들려면 인터페이스를 확장합니다 TransportBindingElement . 최소한 Clone 메서드와 TransportBindingElement.Scheme 속성을 구현해야 합니다.
Clone – 이 Binding 요소의 새 복사본을 반환해야 합니다. 바인딩 요소 작성자는 기본 복사 생성자를 호출하는 복사 생성자를 통해 Clone을 구현한 다음 이 클래스의 추가 필드를 복제하는 것이 좋습니다.
Scheme – get 속성은 Scheme 바인딩 요소가 나타내는 전송 프로토콜에 대한 URI 체계를 반환합니다. 예를 들어, System.ServiceModel.Channels.HttpTransportBindingElement와 System.ServiceModel.Channels.TcpTransportBindingElement 는 각각의 Scheme 속성에서 "http" 그리고 "net.tcp"를 반환합니다.
바인딩 요소 인코딩
새 인코딩 바인딩 요소를 만들려면 먼저 클래스를 BindingElement 확장하고 클래스를 구현합니다 System.ServiceModel.Channels.MessageEncodingBindingElement . 최소한 Clone 및 MessageEncodingBindingElement.CreateMessageEncoderFactory 메서드와 MessageEncodingBindingElement.MessageVersion 속성을 구현해야 합니다.
Clone; 이 바인딩 요소의 새 복사본을 반환합니다. 최적의 관행으로, 우리는 바인딩 요소 작성자가 기본 복사 생성자를 호출하는 복사 생성자를 사용하여 Clone를 구현한 후, 이 클래스의 추가 필드를 복제하는 것을 권장합니다.
CreateMessageEncoderFactory; MessageEncoderFactory를 반환하여 새 인코더를 구현하고 MessageEncoder을(를) 확장해야 하는 실제 클래스에 대한 핸들을 제공합니다. 자세한 내용은 MessageEncoderFactory 및 MessageEncoder참조하세요.
MessageVersion; MessageVersion 사용 중인 SOAP 및 WS-Addressing 버전을 나타내는 이 인코딩에 사용된 값을 반환합니다.
사용자 정의 인코딩 바인딩 요소에 대한 선택적 메서드 및 속성의 전체 목록은 다음을 참조하세요 MessageEncodingBindingElement.
새 바인딩 요소를 만드는 방법에 대한 자세한 내용은 User-Defined 바인딩 만들기를 참조하세요.
채널에 대한 바인딩 요소를 만든 후에는 개발 채널 토픽으로 돌아가서 바인딩 요소에 구성 파일 지원을 추가할지 여부, 메타데이터 게시 지원을 추가하는 경우 및 방법, 바인딩 요소를 사용하는 사용자 정의 바인딩을 생성하는 방법 및 여부를 확인합니다.