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) トランスポートでは、各方向にメッセージを転送する 2 つのモードがサポートされています。

  • バッファー転送では、転送が完了するまで、メッセージ全体がメモリ バッファーに保持されます。

  • ストリーミング転送では、メッセージ ヘッダーだけをバッファーし、メッセージ本体をストリームとして公開し、一度に一部分を読み取ることができます。

転送モードを Streamed に設定すると、両方向のストリーミング通信が可能になります。 転送モードを StreamedRequest または StreamedResponse に設定すると、指示した方向でのみストリーミング通信が可能になります。

ストリーミング転送は、大容量のメモリ バッファーを用意する必要性をなくすことで、サービスのスケーラビリティを向上させます。 転送モードの変更によって実際にスケーラビリティが向上するかどうかは、転送されるメッセージのサイズによって決まります。 スケーラビリティの向上は、大きなメッセージでバッファー転送の代わりにストリーミング転送を使用すると最も明らかになります。

既定では、HTTP、TCP/IP、および名前付きパイプの各トランスポートでバッファー メッセージ転送が使用されます。 、、および システム提供のBasicHttpBindingNetTcpBindingバインディングの値TransferModeは、NetNamedPipeBindingそれらに公開されている転送モード プロパティを使用して設定できます。 モードは、 プロパティを NetTcpBinding 使用 NetTcpBinding.TransferMode して、 クラスに設定できます。 バインドの構成セクションに設定することもできます。

転送モード プロパティを公開しないバインドでは、バインド要素に対して転送モードを設定した後、その要素をカスタム バインドに追加できます。 たとえば、HttpTransportBindingElement を作成し、カスタム バインドの作成時に TransferMode プロパティを使用して転送モードを設定します。 転送モードは、カスタム バインドの構成セクションに設定することもできます。

バッファー転送とストリーミング転送のどちらを使用するかは、HTTP 転送のエンドポイントでローカルに決定します。 HTTP トランスポートの場合、転送モードは、接続、つまりプロキシ サーバーやその他の中継局に伝達されません。 転送モードを設定しても、サービス コントラクトの記述には反映されません。 サービスのプロキシを生成した後、ストリーミング転送を使用するサービスの構成ファイルを編集して、その転送モードを設定できます (これは必須の作業ではありません)。 TCP トランスポートと名前付きパイプ トランスポートの場合、転送モードはポリシー アサーションとして伝達されます。

転送モードを Streamed 使用すると、WCF ランタイムによっていくつかの制限が適用されます。

  • ストリーミング トランスポートで発生する操作は、最大で 1 つの入力パラメーターまたは 1 つの出力パラメーター、あるいはその両方が設定されたコントラクトをプログラミング モデル レイヤーに持つことができます。 設定するパラメーターは、メッセージの本文全体に対応し、Message または Stream の派生型であるか、IXmlSerializable インターフェイスを実装する必要があります。 操作の戻り値を取得することは、出力パラメーターを取得することと同じです。

  • Reliable Messaging や SOAP メッセージ レベルのセキュリティなどの WCF 機能の中には、転送用のメッセージのバッファリングに依存するものもあります。 これらの機能を使用すると、ストリーミングによって得られるパフォーマンス上の利点が減少したり、失われたりする可能性があります。 ストリーミング トランスポートを保護するには、トランスポート レベルのセキュリティだけを使用するか、WS-Security クレームとトランスポート セキュリティを組み合わせた混合モードセキュリティを使用します。

  • SOAP ヘッダーは、転送モードに Streamed が設定された場合でも、常にバッファーされます。 メッセージのヘッダーは、さまざまなバインドとバインド要素に公開される MaxBufferSize トランスポート クォータのサイズを超過してはなりません。

転送モードを Buffered から Streamed に変更すると、TCP トランスポートと名前付きパイプ トランスポートのネイティブなチャネル形状も変更されます。 バッファー転送では、ネイティブなチャネル形状は IDuplexSessionChannel です。 ストリーム転送では、ネイティブなチャネル形状は IRequestChannelIReplyChannel です。 この結果、セッションフル サービス コントラクトは、トランスポート ストリーミングでは使用できません。

適用対象