TransferMode TransferMode TransferMode TransferMode Enum

Definición

Indica si un canal utiliza modos transmitidos o almacenados en búfer para la transferencia de mensajes de solicitud y de respuesta.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
Herencia

Campos

Buffered Buffered Buffered Buffered 0

Los mensajes de solicitud y respuesta están almacenados en búfer.The request and response messages are both buffered.

Streamed Streamed Streamed Streamed 1

Se transmiten los mensajes de solicitud y respuesta.The request and response messages are both streamed.

StreamedRequest StreamedRequest StreamedRequest StreamedRequest 2

Se transmite el mensaje de solicitud y se almacena en búfer el mensaje de respuesta.The request message is streamed and the response message is buffered.

StreamedResponse StreamedResponse StreamedResponse StreamedResponse 3

Se almacena en búfer el mensaje de solicitud y se transmite el mensaje de respuesta.The request message is buffered and the response message is streamed.

Ejemplos

Ejemplo de código siguiente muestra cómo establecer el TransferMode propiedad a transmitido por secuencias a través de código: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);  

El ejemplo siguiente muestra Streamed propiedad a transmitido por secuencias a través de configuración:The following sample shows Streamed property to Streamed through configuration:

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

Comentarios

Los transportes de Windows Communication Foundation (WCF) admiten dos modos de transferencia de mensajes en cada dirección:Windows Communication Foundation (WCF) transports support two modes of transferring messages in each direction:

  • Las transferencias almacenadas en búfer contienen el mensaje completo en un búfer de memoria hasta que la transferencia haya finalizado.Buffered transfers hold the entire message in a memory buffer until the transfer is complete.

  • Las transferencias transmitidas sólo almacenan en búfer los encabezados de mensaje y exponen el cuerpo del mensaje como una secuencia, de la que se pueden leer partes más pequeñas cada vez.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.

Establecer el modo de transferencia en transmitido por secuencias permite la comunicación de transmisión por secuencias en ambas direcciones.Setting the transfer mode to Streamed enables streaming communication in both directions. Establecer el modo de transferencia en StreamedRequest o StreamedResponse permite la comunicación de transmisión por secuencias solo en la dirección indicada.Setting the transfer mode to StreamedRequest or StreamedResponse enables streaming communication only in the indicated direction.

Las transferencias por secuencias pueden mejorar la escalabilidad de un servicio eliminando la necesidad de grandes búferes de memoria.Streamed transfers can improve the scalability of a service by eliminating the need for large memory buffers. Que el cambio del modo de transferencia mejore realmente la escalabilidad depende en la práctica del tamaño de los mensajes que se estén transfiriendo.Whether changing the transfer mode actually improves scalability in practice depends on the size of the messages being transferred. Las mejoras en escalabilidad deberían ser muy evidentes cuando los mensajes grandes utilizan transferencias transmitidas en vez de almacenadas en búfer.Improvements in scalability should be most evident when large messages use streamed instead of buffered transfers.

De forma predeterminada, los transportes HTTP, TCP/IP y de canalización con nombre utilizan transferencias de mensajes almacenados en búfer.By default, the HTTP, TCP/IP and named pipe transports use buffered message transfers. Puede establecer los valores de Streamed en los enlaces proporcionados por el sistema BasicHttpBinding, NetTcpBinding, NetNamedPipeBinding utilizando las propiedades de modo de transferencia expuestas en ellos.You can set the values of Streamed on the BasicHttpBinding, NetTcpBinding, NetNamedPipeBinding system-provided bindings using the transfer mode properties exposed on them. El modo se puede establecer en NetTcpBinding, por ejemplo, utilizando la propiedad TransferMode.The mode can be set on the NetTcpBinding, for example, by using the TransferMode property. También se puede establecer en la sección de configuración para el enlace.It can also be set in the configuration section for the binding.

Para los enlaces que no exponen la propiedad de modo de transferencia, el modo de transferencia se puede establecer en el elemento de enlace del transporte y este elemento se puede agregar a continuación a un enlace personalizado.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. Por ejemplo, cree HttpTransportBindingElement y utilice la propiedad TransferMode para establecer el modo de transferencia al crear un enlace personalizado.For example, create an HttpTransportBindingElement and use the TransferMode property to set the transfer mode when creating a custom binding. El modo de transferencia también se puede establecer en la sección de configuración para el enlace personalizado.The transfer mode can also be set in the configuration section for the custom binding.

La decisión de utilizar transferencias almacenadas en búfer o transmitidas es una decisión local del punto de conexión para transportes HTTP.The decision to use either buffered or streamed transfers is a local decision of the endpoint for HTTP transports. Para los transportes HTTP, el modo de transferencia no se propaga a través de una conexión o a los servidores proxy o a otros intermediarios.For HTTP transports, the transfer mode does not propagate across a connection, or to proxy servers or other intermediaries. El establecimiento del modo de transferencia no se refleja en la descripción del contrato de servicio.Setting the transfer mode is not reflected in the description of the service contract. Después de generar un proxy a un servicio, puede (está permitido pero no es necesario) editar el archivo de configuración de los servicios pensado para ser utilizado con transferencias transmitidas para establecer el modo de transferencia.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. En los transportes con canalizaciones con nombre y TCP, el modo de transferencia se propaga como una aserción de directiva.For TCP and named pipe transports, the transfer mode is propagated as a policy assertion.

Usar el modo de transferencia transmitido por secuencias hace que el tiempo de ejecución WCF aplicar algunas restricciones.Using the Streamed transfer mode causes the WCF runtime to enforce some restrictions.

  • Las operaciones que se producen por un transporte transmitido en secuencias pueden tener un contrato con a lo sumo un parámetro de entrada y/o de salida en la capa del modelo de programación.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. Ese parámetro corresponde al cuerpo completo del mensaje y debe ser un Message, un subtipo de Stream o implementar la interfaz 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. Tener un valor devuelto para una operación equivale a tener un parámetro de salida.Having a return value for an operation is equivalent to having an output parameter.

  • Algunas características WCF como mensajería confiable y seguridad de nivel de mensaje SOAP se basan en búfer los mensajes para las transmisiones.Some WCF features such as Reliable Messaging and SOAP message-level security rely on buffering messages for transmissions. El uso de estas características puede reducir o eliminar las ventajas de rendimiento ganadas mediante la transmisión por secuencias.Using these features may reduce or eliminate the performance benefits gained by using streaming. Para proteger un transporte transmitido, utilice sólo la seguridad de nivel de transporte o utilice la seguridad de modo mixto, que combina las notificaciones de WS-Security con la seguridad de transporte.To secure a streamed transport, use transport level security only or use mixed-mode security, which combines WS-Security claims with transport security.

  • Encabezados SOAP siempre están en el búfer, incluso cuando se establece el modo de transferencia en transmitido por secuencias.SOAP headers are always buffered, even when the transfer mode is set to Streamed. Los encabezados para un mensaje no deben superar el tamaño de la cuota de transporte de MaxBufferSize que se expone en los diferentes enlaces y elementos de enlace.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.

Cambiar el modo de transferencia de almacenadas en búfer a transmitido por secuencias también cambia la forma del canal nativo de transportes de canalización con nombre y TCP.Changing the transfer mode from Buffered to Streamed also changes the native channel shape of the TCP and named pipe transports. Para transferencias almacenadas en búfer, la forma del canal nativo es IDuplexSessionChannel.For buffered transfers, the native channel shape is IDuplexSessionChannel. Para las transferencias por secuencias, los canales nativos son IRequestChannel y IReplyChannel.For streamed transfers, the native channels are IRequestChannel and IReplyChannel. Una consecuencia de esto es que los contratos de servicios con sesión no pueden utilizar con transmisión por secuencias del transporte.A consequence of this is that sessionful service contracts cannot be used with transport streaming.

Se aplica a