TransferMode 列挙型
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
チャネルが要求メッセージと応答メッセージの転送でストリーミング モードとバッファー モードのどちらを使用するかを示します。
public enum class TransferMode
public enum TransferMode
type TransferMode =
Public Enum 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 です。 ストリーム転送では、ネイティブなチャネル形状は IRequestChannel と IReplyChannel です。 この結果、セッションフル サービス コントラクトは、トランスポート ストリーミングでは使用できません。
適用対象
.NET