TransferMode Enumeración

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
TransferMode

Campos

Buffered 0

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

Streamed 1

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

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 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

En el ejemplo siguiente se establece la propiedad TcpTransportBindingElement. TransferMode en Streamed a través del código:The following example sets the TcpTransportBindingElement.TransferMode property to Streamed through code:

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

En el ejemplo siguiente se establece la propiedad TcpTransportBindingElement. TransferMode en Streamed a través de la configuración:The following example sets the TcpTransportBindingElement.TransferMode 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 Streamed habilita 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 habilita la comunicación de la transmisión por secuencias sólo 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 TransferMode en los enlaces proporcionados por el sistema BasicHttpBinding, NetTcpBinding y NetNamedPipeBinding mediante las propiedades del modo de transferencia expuestas en ellos.You can set the values of TransferMode on the BasicHttpBinding, NetTcpBinding, and NetNamedPipeBinding system-provided bindings using the transfer mode properties exposed on them. El modo se puede establecer en la clase NetTcpBinding, por ejemplo, mediante la propiedad NetTcpBinding.TransferMode.The mode can be set on the NetTcpBinding class, for example, by using the NetTcpBinding.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 extremo 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.

El uso del modo de transferencia Streamed hace que el tiempo de ejecución de WCF Aplique 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 de WCF como la mensajería de confianza y la seguridad de nivel de mensaje SOAP se basan en el almacenamiento en búfer de 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.

  • Los encabezados SOAP siempre están almacenados en búfer, incluso cuando el modo de transferencia está establecido en Streamed.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.

Si se cambia el modo de transferencia de Buffereda Streamed, también se cambia la forma del canal nativo de TCP y de transportes de canalización con nombre.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