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.

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.

Streamed 1

Les messages de demande et de réponse sont transmis en continu.

StreamedRequest 2

Le message de demande est transmis en continu et le message de réponse est mis en mémoire tampon.

StreamedResponse 3

Le message de demande est mis en mémoire tampon et le message de réponse est transmis en continu.

Exemples

L’exemple suivant définit la propriété TcpTransportBindingElement.TransferMode sur Streamed via le 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 :

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

Remarques

Les transports Windows Communication Foundation (WCF) prennent en charge deux modes de transfert de messages dans chaque 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é.

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

L'affectation de Streamed au mode de transfert permet d'assurer la communication en mode de diffusion en continu dans les deux sens. En revanche, la valeur StreamedRequest ou StreamedResponse ne permet d'assurer des communications en flux continu que dans le sens spécifié.

Les transferts en flux continu peuvent améliorer l'évolutivité d'un service car ils évitent d'avoir à recourir à de grandes mémoires tampons. Le gain réel d'évolutivité dépend de la taille des messages transférés. Il est plus significatif dans le cas de messages volumineux.

Par défaut, les transports HTTP, TCP/IP et de canal nommé utilisent la mise en mémoire tampon. Vous pouvez définir les valeurs de TransferMode sur les liaisons fournies par le BasicHttpBindingsystème , NetTcpBindinget NetNamedPipeBinding à l’aide des propriétés de mode de transfert exposées sur ces liaisons. Le mode peut être défini sur la NetTcpBinding classe, par exemple, à l’aide de la NetTcpBinding.TransferMode propriété . Il peut également être réglé dans la section de configuration pour la liaison.

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. 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. Le mode de transfert peut également être défini dans la section de configuration pour la liaison personnalisée.

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. 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. La définition du mode de transfert n'est pas reflétée dans la description du contrat de service. 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. Pour les transports TCP et les transports de canal nommé, le mode de transfert est propagé sous forme d'assertion de stratégie.

L’utilisation du Streamed mode de transfert entraîne l’application de certaines restrictions par le runtime WCF.

  • 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. 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. Disposer d'une valeur de retour pour une opération équivaut à disposer d'un paramètre de sortie.

  • Certaines fonctionnalités WCF telles que la messagerie fiable et la sécurité au niveau des messages SOAP s’appuient sur la mise en mémoire tampon des messages pour les transmissions. L’utilisation de ces fonctionnalités peut réduire, voire annuler les gains en termes de performances obtenus grâce au flux continu. 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.

  • Les en-têtes SOAP sont toujours mis en mémoire tampon, même lorsque le mode de transfert a la valeur 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.

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é. Pour les transferts mis en mémoire tampon, la forme du canal natif est IDuplexSessionChannel. Pour les transferts en flux continu, les canaux natifs correspondent à IRequestChannel et à 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.

S’applique à