TransferMode TransferMode TransferMode TransferMode Enum

定義

チャネルが要求メッセージと応答メッセージの転送でストリーミング モードとバッファー モードのどちらを使用するかを示します。Indicates whether a channel uses streamed or buffered modes for the transfer of request and response messages.

public enum class TransferMode
public enum TransferMode
type TransferMode = 
Public Enum TransferMode
継承

フィールド

Buffered Buffered Buffered Buffered 0

要求メッセージと応答メッセージの両方をバッファーします。The request and response messages are both buffered.

Streamed Streamed Streamed Streamed 1

要求メッセージと応答メッセージの両方をストリーミングします。The request and response messages are both streamed.

StreamedRequest StreamedRequest StreamedRequest StreamedRequest 2

要求メッセージをストリーミングし、応答メッセージをバッファーします。The request message is streamed and the response message is buffered.

StreamedResponse StreamedResponse StreamedResponse StreamedResponse 3

要求メッセージをバッファーし、応答メッセージをストリーミングします。The request message is buffered and the response message is streamed.

次のコード サンプルは、設定を示しています、 TransferMode Streamed にコードのプロパティ。The following code sample shows setting the TransferMode property to Streamed through code:

C#c#

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

次のサンプル表示Streamed構成を通じて Streamed プロパティ。The following sample shows Streamed property to Streamed through configuration:

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

注釈

Windows Communication Foundation (WCF) トランスポートでは、各方向にメッセージを転送する 2 つのモードをサポートします。Windows Communication Foundation (WCF) transports support two modes of transferring messages in each direction:

  • バッファー転送では、転送が完了するまで、メッセージ全体がメモリ バッファーに保持されます。Buffered transfers hold the entire message in a memory buffer until the transfer is complete.

  • ストリーミング転送では、メッセージ ヘッダーだけをバッファーし、メッセージ本体をストリームとして公開し、一度に一部分を読み取ることができます。Streamed transfers only buffer the message headers and expose the message body as a stream, from which smaller portions can be read at a time.

転送モードを Streamed に設定すると、双方向のストリーミング通信が有効になります。Setting the transfer mode to Streamed enables streaming communication in both directions. StreamedRequest または StreamedResponse 転送モードを設定すると、指定した方向にのみストリーミング通信が有効になります。Setting the transfer mode to StreamedRequest or StreamedResponse enables streaming communication only in the indicated direction.

ストリーミング転送は、大容量のメモリ バッファーを用意する必要性をなくすことで、サービスのスケーラビリティを向上させます。Streamed transfers can improve the scalability of a service by eliminating the need for large memory buffers. 転送モードの変更によって実際にスケーラビリティが向上するかどうかは、転送されるメッセージのサイズによって決まります。Whether changing the transfer mode actually improves scalability in practice depends on the size of the messages being transferred. スケーラビリティの向上は、大きなメッセージでバッファー転送の代わりにストリーミング転送を使用すると最も明らかになります。Improvements in scalability should be most evident when large messages use streamed instead of buffered transfers.

既定では、HTTP、TCP/IP、および名前付きパイプの各トランスポートでバッファー メッセージ転送が使用されます。By default, the HTTP, TCP/IP and named pipe transports use buffered message transfers. システム指定のバインドである StreamedBasicHttpBinding、および NetTcpBinding に公開される転送モード プロパティを使用して、NetNamedPipeBinding の値を設定できます。You can set the values of Streamed on the BasicHttpBinding, NetTcpBinding, NetNamedPipeBinding system-provided bindings using the transfer mode properties exposed on them. このモードは、たとえば NetTcpBinding プロパティを使用することで、TransferMode に設定できます。The mode can be set on the NetTcpBinding, for example, by using the TransferMode property. バインドの構成セクションに設定することもできます。It can also be set in the configuration section for the binding.

転送モード プロパティを公開しないバインドでは、バインド要素に対して転送モードを設定した後、その要素をカスタム バインドに追加できます。For bindings that do not expose the transfer mode property, the transfer mode can be set on the binding element of the transport and this element can then be added to a custom binding. たとえば、HttpTransportBindingElement を作成し、カスタム バインドの作成時に TransferMode プロパティを使用して転送モードを設定します。For example, create an HttpTransportBindingElement and use the TransferMode property to set the transfer mode when creating a custom binding. 転送モードは、カスタム バインドの構成セクションに設定することもできます。The transfer mode can also be set in the configuration section for the custom binding.

バッファー転送とストリーミング転送のどちらを使用するかは、HTTP 転送のエンドポイントでローカルに決定します。The decision to use either buffered or streamed transfers is a local decision of the endpoint for HTTP transports. HTTP トランスポートの場合、転送モードは、接続、つまりプロキシ サーバーやその他の中継局に伝達されません。For HTTP transports, the transfer mode does not propagate across a connection, or to proxy servers or other intermediaries. 転送モードを設定しても、サービス コントラクトの記述には反映されません。Setting the transfer mode is not reflected in the description of the service contract. サービスのプロキシを生成した後、ストリーミング転送を使用するサービスの構成ファイルを編集して、その転送モードを設定できます (これは必須の作業ではありません)。After generating a proxy to a service, you can (it is allowed but not required) edit the configuration file for services intended to be used with streamed transfers to set the transfer mode. TCP トランスポートと名前付きパイプ トランスポートの場合、転送モードはポリシー アサーションとして伝達されます。For TCP and named pipe transports, the transfer mode is propagated as a policy assertion.

Streamed 転送モードを使用すると、WCF ランタイムがいくつかの制限を適用します。Using the Streamed transfer mode causes the WCF runtime to enforce some restrictions.

  • ストリーミング トランスポートで発生する操作は、最大で 1 つの入力パラメーターまたは 1 つの出力パラメーター、あるいはその両方が設定されたコントラクトをプログラミング モデル レイヤーに持つことができます。Operations that occur across a streamed transport can have a contract with at most one input and/or one output parameter at the programming model layer. 設定するパラメーターは、メッセージの本文全体に対応し、Message または Stream の派生型であるか、IXmlSerializable インターフェイスを実装する必要があります。That parameter corresponds to the entire body of the message and must be a Message, be a subtype of Stream, or implement the IXmlSerializable interface. 操作の戻り値を取得することは、出力パラメーターを取得することと同じです。Having a return value for an operation is equivalent to having an output parameter.

  • 信頼できるメッセージングや SOAP メッセージ レベルのセキュリティなどの一部の WCF 機能は、メッセージ転送のバッファーに依存しています。Some WCF features such as Reliable Messaging and SOAP message-level security rely on buffering messages for transmissions. これらの機能を使用すると、ストリーミングによって得られるパフォーマンス上の利点が減少したり、失われたりする可能性があります。Using these features may reduce or eliminate the performance benefits gained by using streaming. ストリーミング トランスポートを保護するには、トランスポート レベルのセキュリティだけを使用するか、WS-Security クレームとトランスポート セキュリティを組み合わせた混合モードセキュリティを使用します。To secure a streamed transport, use transport level security only or use mixed-mode security, which combines WS-Security claims with transport security.

  • SOAP ヘッダーは、転送モードが Streamed に設定されている場合でも常にバッファリングされます。SOAP headers are always buffered, even when the transfer mode is set to Streamed. メッセージのヘッダーは、さまざまなバインドとバインド要素に公開される MaxBufferSize トランスポート クォータのサイズを超過してはなりません。The headers for a message must not exceed the size of the MaxBufferSize transport quota which is exposed on the various bindings and binding elements.

Streamed バッファーから転送モードを変更すると、TCP と名前付きパイプ トランスポートのネイティブなチャネル形状も変更されます。Changing the transfer mode from Buffered to Streamed also changes the native channel shape of the TCP and named pipe transports. バッファー転送では、ネイティブなチャネル形状は IDuplexSessionChannel です。For buffered transfers, the native channel shape is IDuplexSessionChannel. ストリーム転送では、ネイティブなチャネル形状は IRequestChannelIReplyChannel です。For streamed transfers, the native channels are IRequestChannel and IReplyChannel. この結果、セッションフル サービス コントラクトは、トランスポート ストリーミングでは使用できません。A consequence of this is that sessionful service contracts cannot be used with transport streaming.

適用対象