英語で読む

次の方法で共有


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 です。 この結果、セッションフル サービス コントラクトは、トランスポート ストリーミングでは使用できません。

適用対象

製品 バージョン
.NET Core 1.0, Core 1.1, 8 (package-provided), 9 (package-provided), 10 (package-provided)
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0 (package-provided)
UWP 10.0