BindingElement 만들기
바인딩 및 바인딩 요소(각각 System.ServiceModel.Channels.Binding 및 System.ServiceModel.Channels.BindingElement를 확장하는 개체)에서 WCF(Windows Communication Foundation) 애플리케이션 모델이 채널 팩터리 및 채널 수신기와 연결됩니다. 바인딩 없이 사용자 지정 채널을 사용하려면 서비스 채널 수준 프로그래밍 및 클라이언트 채널 수준 프로그래밍에 설명된 대로 채널 수준에서 프로그래밍해야 합니다. 이 항목에서는 WCF에서 채널을 사용하기 위한 최소 요구 사항, 채널에 사용할 BindingElement 개발 및 채널 개발의 4단계에서 설명한 애플리케이션에서의 채널 사용 방법에 대해 설명합니다.
개요
채널에 대한 BindingElement를 만들면 개발자가 WCF 애플리케이션에서 사용할 수 있습니다. BindingElement개체는 채널의 정확한 형식 정보가 없어도 System.ServiceModel.ServiceHost 클래스에서 WCF 애플리케이션에 연결하는 데 사용할 수 있습니다.
BindingElement가 만들어지면 채널 개발에 설명된 나머지 채널 개발 단계를 수행하여 요구 사항에 따라 더 많은 기능을 사용할 수 있습니다.
바인딩 요소 추가
사용자 지정 BindingElement를 구현하려면 BindingElement에서 상속된 클래스를 작성합니다. 예를 들어, 대용량 메시지를 여러 개의 청크로 나누고 반대쪽 끝에서 이를 다시 어셈블할 수 있는 ChunkingChannel
을 개발한 경우 BindingElement를 구현하여 이를 사용하기 위해 바인딩을 구성하면 모든 바인딩에 이 채널을 사용할 수 있습니다. 이 항목의 나머지 부분에서는 바인딩 요소를 구현하기 위한 요구 사항을 설명하기 위해 ChunkingChannel
을 사용합니다.
ChunkingBindingElement
는 ChunkingChannelFactory
및 ChunkingChannelListener
를 만듭니다. 또한 CanBuildChannelFactory 및 CanBuildChannelListener 구현을 재정의하고, 형식 매개 변수가IDuplexSessionChannel(이 예제에서는 이 채널 셰이프가 ChunkingChannel
에서 지원하는 유일한 채널 셰이프임)인지 그리고 바인딩에 있는 다른 바인딩 요소가 이 채널 셰이프를 지원하는지를 확인합니다.
BuildChannelFactory는 요청한 채널 셰이프를 만들 수 있는지 먼저 확인한 다음 청크 분할되는 메시지 동작 목록을 가져옵니다. 그런 다음 새로운 ChunkingChannelFactory
를 만들고 이를 내부 채널 팩터리에 전달합니다. 전송 바인딩 요소를 만드는 경우 이 요소가 바인딩 스택의 마지막 요소이므로 채널 수신기나 채널 팩터리를 만들어야 합니다.
BuildChannelListener에서도 ChunkingChannelListener
를 만들어 내부 채널 수신기에 전달하는 구현 방법이 비슷합니다.
전송 채널을 사용하는 다른 예제인 Transport: 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을 구현하고 IChannel.GetProperty를 사용하여 ChannelProtectionRequirements
를 구현해야 합니다. 이렇게 하면 이 바인딩 요소에 대해 ChannelProtectionRequirements가 반환됩니다. 자세한 내용은 ChannelProtectionRequirements를 참조하세요.
Clone은 이 바인딩 요소의 새 복사본을 반환합니다. 바인딩 요소 작성자는 기본 복사 생성자를 호출한 다음 이 클래스의 추가 필드를 복제하는 복사 생성자를 사용하여 Clone을 구현하는 것이 좋습니다.
전송 바인딩 요소
새 전송 바인딩 요소를 만들려면 TransportBindingElement 인터페이스를 확장합니다. 그런 다음 최소한 Clone 메서드와 TransportBindingElement.Scheme 속성을 구현해야 합니다.
Clone – 이 바인딩 요소의 새 복사본을 반환합니다. 바인딩 요소 작성자는 기본 복사 생성자를 호출한 다음 이 클래스의 추가 필드를 복제하는 복사 생성자를 통해 Clone을 구현하는 것이 좋습니다.
Scheme – Scheme get 속성은 바인딩 요소로 표현되는 전송 프로토콜의 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를 참조하십시오.
새 바인딩 요소를 만드는 방법에 대한 자세한 내용은 사용자 정의 바인딩 만들기를 참조하세요.
채널에 사용할 바인딩 요소를 만들었으면, 채널 개발 항목으로 돌아가서 바인딩 요소에 구성 파일 지원을 추가할지 여부, 메타데이터 게시 지원을 추가할지 여부 및 추가 방법, 바인딩 요소를 사용하는 사용자 정의 바인딩 생성 여부 및 생성 방법 등을 확인합니다.