TransferMode TransferMode TransferMode TransferMode Enum

Definizione

Indica se un canale utilizza modalità di trasferimento dei messaggi di richiesta e risposta con flusso o con memorizzazione nel buffer.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
Ereditarietà

Campi

Buffered Buffered Buffered Buffered 0

I messaggi di richiesta e risposta vengono entrambi memorizzati nel buffer.The request and response messages are both buffered.

Streamed Streamed Streamed Streamed 1

I messaggi di richiesta e risposta vengono entrambi inviati nel flusso.The request and response messages are both streamed.

StreamedRequest StreamedRequest StreamedRequest StreamedRequest 2

Il messaggio di richiesta viene inviato nel flusso e quello di risposta viene memorizzato nel buffer.The request message is streamed and the response message is buffered.

StreamedResponse StreamedResponse StreamedResponse StreamedResponse 3

Il messaggio di richiesta viene memorizzato nel buffer e quello di risposta viene inviato nel flusso.The request message is buffered and the response message is streamed.

Esempi

Esempio di codice seguente viene illustrata l'impostazione di TransferMode proprietà Streamed tramite codice: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);  

L'esempio seguente descrive Streamed proprietà Streamed tramite configurazione:The following sample shows Streamed property to Streamed through configuration:

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

Commenti

I trasporti di Windows Communication Foundation (WCF) supportano due modalità di trasferimento dei messaggi in ciascuna direzione:Windows Communication Foundation (WCF) transports support two modes of transferring messages in each direction:

  • Trasferimento con memorizzazione nel buffer: in questa modalità, l'intero messaggio viene memorizzato in un buffer fino al completamento del trasferimento.Buffered transfers hold the entire message in a memory buffer until the transfer is complete.

  • Trasferimento con flusso: in questa modalità vengono memorizzate nel buffer solo le intestazioni dei messaggi e il corpo del messaggio viene esposto come un flusso da cui è possibile leggere parti più piccole per volta.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.

Impostazione della modalità di trasferimento su Streamed consente comunicazione con flusso in entrambe le direzioni.Setting the transfer mode to Streamed enables streaming communication in both directions. Impostazione della modalità di trasferimento su StreamedRequest o StreamedResponse consente comunicazione con flusso soltanto nella direzione scelta.Setting the transfer mode to StreamedRequest or StreamedResponse enables streaming communication only in the indicated direction.

I trasferimenti con flusso possono migliorare la scalabilità di un servizio eliminando l'esigenza di utilizzare buffer di memoria di grandi dimensioni.Streamed transfers can improve the scalability of a service by eliminating the need for large memory buffers. La capacità di migliorare effettivamente la scalabilità mediante l'impostazione della modalità di trasferimento con flusso dipende di fatto dalle dimensioni dei messaggi da trasferire.Whether changing the transfer mode actually improves scalability in practice depends on the size of the messages being transferred. I miglioramenti di scalabilità dovrebbero essere più evidenti nel caso di messaggi di grandi dimensioni che utilizzano trasferimenti con flusso anziché con memorizzazione nel buffer.Improvements in scalability should be most evident when large messages use streamed instead of buffered transfers.

Per impostazione predefinita, i trasporti HTTP, TCP/IP e named pipe utilizzano trasferimenti di messaggi con memorizzazione nel buffer.By default, the HTTP, TCP/IP and named pipe transports use buffered message transfers. I valori di Streamed possono essere impostati nelle associazioni fornite dal sistema BasicHttpBinding, NetTcpBinding, NetNamedPipeBinding utilizzando le proprietà relative alle modalità di trasferimento esposte in esse.You can set the values of Streamed on the BasicHttpBinding, NetTcpBinding, NetNamedPipeBinding system-provided bindings using the transfer mode properties exposed on them. È possibile, ad esempio, impostare la modalità nell'associazione NetTcpBinding utilizzando la proprietà TransferMode.The mode can be set on the NetTcpBinding, for example, by using the TransferMode property. La modalità può inoltre essere impostata nella sezione di configurazione dell'associazione.It can also be set in the configuration section for the binding.

Per le associazioni che non espongono la proprietà relativa alla modalità di trasferimento, è possibile impostare tale modalità nell'elemento di associazione del trasporto e quindi aggiungere l'elemento a un'associazione personalizzata.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. Ad esempio, quando si crea un'associazione personalizzata, per impostare la modalità di trasferimento è possibile creare un elemento HttpTransportBindingElement e utilizzare la proprietà TransferMode.For example, create an HttpTransportBindingElement and use the TransferMode property to set the transfer mode when creating a custom binding. La modalità di trasferimento può inoltre essere impostata nella sezione di configurazione dell'associazione personalizzata.The transfer mode can also be set in the configuration section for the custom binding.

La scelta della modalità di trasferimento da utilizzare viene effettuata localmente dall'endpoint per i trasporti HTTP.The decision to use either buffered or streamed transfers is a local decision of the endpoint for HTTP transports. Per i trasporti HTTP, la modalità di trasferimento non si propaga attraverso una connessione o ai server proxy e agli altri intermediari.For HTTP transports, the transfer mode does not propagate across a connection, or to proxy servers or other intermediaries. L'impostazione della modalità di trasferimento non si riflette nella descrizione del contratto del servizio.Setting the transfer mode is not reflected in the description of the service contract. Dopo aver generato un proxy per un servizio, è consentito, ma non obbligatorio, modificare il file di configurazione dei servizi per cui si desidera utilizzare il trasferimento con flusso per impostare la modalità di trasferimento.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. Per i trasporti TCP e named pipe, la modalità di trasferimento viene propagata come asserzione di criteri.For TCP and named pipe transports, the transfer mode is propagated as a policy assertion.

Usando la modalità di trasferimento Streamed fa sì che il runtime di WCF applicare alcune restrizioni.Using the Streamed transfer mode causes the WCF runtime to enforce some restrictions.

  • Le operazioni che si verificano in un trasporto con flusso possono presentare un contratto avente al massimo un solo parametro di input e/o di output a livello del modello di programmazione.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. Questo parametro corrisponde al corpo intero del messaggio e deve essere un messaggio Message, un sottotipo di Stream oppure deve implementare l'interfaccia 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. Definire un valore restituito di un'operazione equivale a definire un parametro di output.Having a return value for an operation is equivalent to having an output parameter.

  • Alcune funzionalità WCF, ad esempio messaggistica affidabile e la sicurezza a livello di messaggio SOAP si basano su memorizzazione nel buffer i messaggi per le trasmissioni.Some WCF features such as Reliable Messaging and SOAP message-level security rely on buffering messages for transmissions. L'utilizzo di queste funzionalità può ridurre o eliminare del tutto i vantaggi in termini di prestazioni ottenuti mediante i flussi.Using these features may reduce or eliminate the performance benefits gained by using streaming. Per proteggere un trasporto con flusso, utilizzare soltanto la sicurezza a livello di trasporto oppure utilizzare una sicurezza a modalità mista che combini le attestazioni WS-Security con la sicurezza del trasporto.To secure a streamed transport, use transport level security only or use mixed-mode security, which combines WS-Security claims with transport security.

  • Intestazioni SOAP vengono sempre memorizzate, anche quando la modalità di trasferimento è Streamed.SOAP headers are always buffered, even when the transfer mode is set to Streamed. Le intestazioni di un messaggio non devono superare la quota di trasporto indicata nella proprietà MaxBufferSize esposta in varie associazioni ed elementi di associazione.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.

La modalità di trasferimento da memorizzati nel buffer a Streamed modifica anche la forma del canale nativo dei trasporti delle named pipe e TCP.Changing the transfer mode from Buffered to Streamed also changes the native channel shape of the TCP and named pipe transports. Per i trasferimenti con memorizzazione nel buffer, la forma del canale nativo è IDuplexSessionChannel.For buffered transfers, the native channel shape is IDuplexSessionChannel. Per i trasferimenti con flusso, i canali nativi sono IRequestChannel e IReplyChannel.For streamed transfers, the native channels are IRequestChannel and IReplyChannel. Ne consegue che i contratti di servizio con sessione non vengono utilizzati con il flusso del trasporto.A consequence of this is that sessionful service contracts cannot be used with transport streaming.

Si applica a