TransferMode Énumération

Définition

Indique si un canal utilise des modes de transmission en continu ou par mise en mémoire tampon pour les messages de demande et de réponse.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
Héritage
TransferMode

Champs

Buffered 0

Les messages de demande et de réponse sont mis en mémoire tampon.The request and response messages are both buffered.

Streamed 1

Les messages de demande et de réponse sont transmis en continu.The request and response messages are both streamed.

StreamedRequest 2

Le message de demande est transmis en continu et le message de réponse est mis en mémoire tampon.The request message is streamed and the response message is buffered.

StreamedResponse 3

Le message de demande est mis en mémoire tampon et le message de réponse est transmis en continu.The request message is buffered and the response message is streamed.

Exemples

L’exemple suivant définit la propriété TcpTransportBindingElement. TransferMode sur Streamed à l’aide du code :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);  

L’exemple suivant définit la propriété TcpTransportBindingElement. TransferMode sur Streamed via la configuration :The following example sets the TcpTransportBindingElement.TransferMode property to Streamed through configuration:

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

Remarques

Les transports Windows Communication Foundation (WCF) prennent en charge deux modes de transfert des messages dans chaque direction :Windows Communication Foundation (WCF) transports support two modes of transferring messages in each direction:

  • Les transferts mis en mémoire tampon conservent la totalité des messages en mémoire tampon tant que leur transfert n'est pas terminé.Buffered transfers hold the entire message in a memory buffer until the transfer is complete.

  • Les transferts en continu ne mettent que les en-têtes de message en mémoire tampon et exposent le corps du message sous forme de flux continu, dont des portions peuvent être lues progressivement.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.

L'affectation de Streamed au mode de transfert permet d'assurer la communication en mode de diffusion en continu dans les deux sens.Setting the transfer mode to Streamed enables streaming communication in both directions. En revanche, la valeur StreamedRequest ou StreamedResponse ne permet d'assurer des communications en flux continu que dans le sens spécifié.Setting the transfer mode to StreamedRequest or StreamedResponse enables streaming communication only in the indicated direction.

Les transferts en flux continu peuvent améliorer l'évolutivité d'un service car ils évitent d'avoir à recourir à de grandes mémoires tampons.Streamed transfers can improve the scalability of a service by eliminating the need for large memory buffers. Le gain réel d'évolutivité dépend de la taille des messages transférés.Whether changing the transfer mode actually improves scalability in practice depends on the size of the messages being transferred. Il est plus significatif dans le cas de messages volumineux.Improvements in scalability should be most evident when large messages use streamed instead of buffered transfers.

Par défaut, les transports HTTP, TCP/IP et de canal nommé utilisent la mise en mémoire tampon.By default, the HTTP, TCP/IP and named pipe transports use buffered message transfers. Vous pouvez définir les valeurs de TransferMode sur les liaisons fournies par le système BasicHttpBinding, NetTcpBindinget NetNamedPipeBinding à l’aide des propriétés du mode de transfert exposées.You can set the values of TransferMode on the BasicHttpBinding, NetTcpBinding, and NetNamedPipeBinding system-provided bindings using the transfer mode properties exposed on them. Le mode peut être défini sur la classe NetTcpBinding, par exemple, à l’aide de la propriété NetTcpBinding.TransferMode.The mode can be set on the NetTcpBinding class, for example, by using the NetTcpBinding.TransferMode property. Il peut également être réglé dans la section de configuration pour la liaison.It can also be set in the configuration section for the binding.

Pour les liaisons qui n'exposent pas la propriété du mode de transfert, celui-ci peut être défini sur l'élément de liaison de transport, et cet élément peut ensuite être ajouté à une liaison personnalisée.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. Par exemple, créez HttpTransportBindingElement et utilisez la propriété TransferMode pour définir le mode de transfert lors de la création d’une liaison personnalisée.For example, create an HttpTransportBindingElement and use the TransferMode property to set the transfer mode when creating a custom binding. Le mode de transfert peut également être défini dans la section de configuration pour la liaison personnalisée.The transfer mode can also be set in the configuration section for the custom binding.

Le choix de l'un ou l'autre mode de transfert (mise en mémoire tampon ou flux continu) revient en local au point de terminaison pour les transports HTTP.The decision to use either buffered or streamed transfers is a local decision of the endpoint for HTTP transports. Pour les transports HTTP, le mode de transfert ne se propage pas sur une connexion ou sur des serveurs proxy ou d'autres intermédiaires.For HTTP transports, the transfer mode does not propagate across a connection, or to proxy servers or other intermediaries. La définition du mode de transfert n'est pas reflétée dans la description du contrat de service.Setting the transfer mode is not reflected in the description of the service contract. Après avoir généré un proxy sur un service, vous pouvez (mais ne devez pas) modifier le fichier de configuration des services destinés à être utilisés avec des transferts en continu pour définir le mode de transfert.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. Pour les transports TCP et les transports de canal nommé, le mode de transfert est propagé sous forme d'assertion de stratégie.For TCP and named pipe transports, the transfer mode is propagated as a policy assertion.

En utilisant le mode de transfert Streamed, le runtime WCF applique certaines restrictions.Using the Streamed transfer mode causes the WCF runtime to enforce some restrictions.

  • Le contrat des opérations intervenant sur un transport en flux continu peut contenir au maximum un paramètre d'entrée ou de sortie au niveau de la couche du modèle de programmation.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. Ce paramètre correspond au corps entier du message et doit être un Message, un sous-type de Stream ou implémenter l'interface 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. Disposer d'une valeur de retour pour une opération équivaut à disposer d'un paramètre de sortie.Having a return value for an operation is equivalent to having an output parameter.

  • Certaines fonctionnalités WCF, telles que la messagerie fiable et la sécurité au niveau du message SOAP, s’appuient sur la mise en mémoire tampon des messages pour les transmissions.Some WCF features such as Reliable Messaging and SOAP message-level security rely on buffering messages for transmissions. L’utilisation de ces fonctionnalités peut réduire, voire annuler les gains en termes de performances obtenus grâce au flux continu.Using these features may reduce or eliminate the performance benefits gained by using streaming. Pour sécuriser un transport en flux continu, utilisez la sécurité de niveau transport uniquement ou la sécurité de mode mixte, qui associe des revendications WS-Security à la sécurité de niveau transport.To secure a streamed transport, use transport level security only or use mixed-mode security, which combines WS-Security claims with transport security.

  • Les en-têtes SOAP sont toujours mis en mémoire tampon, même lorsque le mode de transfert a la valeur Streamed.SOAP headers are always buffered, even when the transfer mode is set to Streamed. Les en-têtes de message ne doivent pas dépasser la taille du quota de transport MaxBufferSize exposé sur les divers éléments de liaison et liaisons.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.

Modifier le mode de transfert de Buffered en Streamed modifie également la forme du canal natif des transports TCP et des transports de canal nommé.Changing the transfer mode from Buffered to Streamed also changes the native channel shape of the TCP and named pipe transports. Pour les transferts mis en mémoire tampon, la forme du canal natif est IDuplexSessionChannel.For buffered transfers, the native channel shape is IDuplexSessionChannel. Pour les transferts en flux continu, les canaux natifs correspondent à IRequestChannel et à IReplyChannel.For streamed transfers, the native channels are IRequestChannel and IReplyChannel. Une conséquence de ce principe réside dans le fait que les contrats de service de session ne peuvent pas être utilisés avec la diffusion en flux continu du transport.A consequence of this is that sessionful service contracts cannot be used with transport streaming.

S’applique à