TransferMode 열거형

정의

채널에서 요청 및 응답 메시지 전송에 스트리밍 모드를 사용하는지 아니면 버퍼링 모드를 사용하는지를 나타냅니다.

public enum class TransferMode
public enum TransferMode
type TransferMode = 
Public Enum TransferMode
상속
TransferMode

필드

Buffered 0

요청 및 응답 메시지가 모두 버퍼링됩니다.

Streamed 1

요청 및 응답 메시지가 모두 스트리밍됩니다.

StreamedRequest 2

요청 메시지는 스트리밍되고 응답 메시지는 버퍼링됩니다.

StreamedResponse 3

요청 메시지는 버퍼링되고 응답 메시지는 스트리밍됩니다.

예제

다음 예제에서는 TcpTransportBindingElement.TransferMode 속성을 Streamed 코드를 통해 설정합니다.

TcpTransportBindingElement transport = new TcpTransportBindingElement();  
transport.TransferMode = TransferMode.Streamed;  
BinaryMessageEncodingBindingElement encoder = new BinaryMessageEncodingBindingElement();  
CustomBinding binding = new CustomBinding(encoder, transport);  

다음 예제에서는 구성을 통해 TcpTransportBindingElement.TransferMode 속성을 Streamed 설정합니다.

<customBinding>  
    <binding name="streamingBinding">  
        <binaryMessageEncoding />  
            <tcpTransport transferMode="Streamed" />  
     </binding>  
</customBinding>  

설명

Windows Communication Foundation(WCF) 전송은 각 방향으로 메시지를 전송하는 두 가지 모드를 지원합니다.

  • 버퍼링된 전송은 전송이 완료될 때까지 전체 메시지를 메모리 버퍼에 보관합니다.

  • 스트리밍 전송은 메시지 헤더만 버퍼링하고 메시지 본문을 스트림으로 노출하며, 이 스트림에서는 더 작은 부분을 한 번에 읽을 수 있습니다.

전송 모드를 Streamed로 설정하면 양방향 스트리밍 통신이 가능합니다. 전송 모드를 StreamedRequest 또는 StreamedResponse로 설정하면 표시된 방향으로만 스트리밍 통신이 가능합니다.

스트리밍 전송은 큰 메모리 버퍼의 필요성을 제거하여 서비스의 확장성을 향상시킬 수 있습니다. 전송 모드를 변경하면 실제로 실제로 확장성이 향상되는지 여부는 전송되는 메시지의 크기에 따라 달라집니다. 확장성 향상은 큰 메시지가 버퍼링된 전송 대신 스트리밍을 사용하는 경우 가장 분명해야 합니다.

기본적으로 HTTP, TCP/IP 및 명명된 파이프 전송은 버퍼링된 메시지 전송을 사용합니다. 에 노출 된 전송 모드 속성을 사용 하 여 시스템 제공 바인딩의 값을 TransferMode BasicHttpBindingNetTcpBindingNetNamedPipeBinding 설정할 수 있습니다. 예를 들어 속성을 사용하여 클래스에서 NetTcpBinding 모드를 NetTcpBinding.TransferMode 설정할 수 있습니다. 바인딩에 대한 구성 섹션에서 설정할 수도 있습니다.

전송 모드 속성을 노출하지 않는 바인딩의 경우 전송 모드를 전송의 바인딩 요소에 설정할 수 있으며 이 요소를 사용자 지정 바인딩에 추가할 수 있습니다. 예를 들어 사용자 지정 바인딩을 HttpTransportBindingElement 만들 때 속성을 만들고 사용하여 TransferMode 전송 모드를 설정합니다. 사용자 지정 바인딩에 대한 구성 섹션에서 전송 모드를 설정할 수도 있습니다.

버퍼링되거나 스트리밍된 전송을 사용하기로 한 결정은 HTTP 전송에 대한 엔드포인트의 로컬 결정입니다. HTTP 전송의 경우 전송 모드는 연결 또는 프록시 서버 또는 기타 중개자로 전파되지 않습니다. 전송 모드 설정은 서비스 계약에 대한 설명에 반영되지 않습니다. 서비스에 대한 프록시를 생성한 후에는 스트리밍 전송과 함께 사용할 서비스에 대한 구성 파일을 편집하여 전송 모드를 설정할 수 있습니다(허용되지만 필수는 아님). TCP 및 명명된 파이프 전송의 경우 전송 모드가 정책 어설션으로 전파됩니다.

전송 모드를 Streamed 사용하면 WCF 런타임이 몇 가지 제한을 적용합니다.

  • 스트리밍 전송에서 발생하는 작업은 프로그래밍 모델 계층에서 최대 하나의 입력 및/또는 하나의 출력 매개 변수와 계약을 맺을 수 있습니다. 해당 매개 변수는 메시지의 전체 본문에 해당하며, 하위 형식Stream이거나 인터페이스를 구현 IXmlSerializable 해야 합니다Message. 작업에 대한 반환 값을 갖는 것은 출력 매개 변수를 갖는 것과 같습니다.

  • 신뢰할 수 있는 메시징 및 SOAP 메시지 수준 보안과 같은 일부 WCF 기능은 전송을 위해 메시지를 버퍼링하는 데 의존합니다. 이러한 기능을 사용하면 스트리밍을 사용하여 얻을 수 있는 성능 이점을 줄이거나 제거할 수 있습니다. 스트리밍 전송을 보호하려면 전송 수준 보안만 사용하거나 WS-Security 클레임을 전송 보안과 결합하는 혼합 모드 보안을 사용합니다.

  • SOAP 헤더는 전송 모드가 Streamed로 설정되어 있더라도 항상 버퍼링됩니다. 메시지의 헤더는 다양한 바인딩 및 바인딩 요소에 노출되는 MaxBufferSize 전송 할당량의 크기를 초과해서는 안 됩니다.

전송 모드를 Buffered에서 Streamed로 변경하면 TCP 및 명명된 파이프 전송의 기본 채널 셰이프도 변경됩니다. 버퍼링된 전송의 경우 네이티브 채널 셰이프는 .입니다 IDuplexSessionChannel. 스트리밍 전송의 경우 네이티브 채널은 다음과 같습니다 IRequestChannel IReplyChannel. 그 결과 세션 서비스 계약을 전송 스트리밍과 함께 사용할 수 없습니다.

적용 대상