Partager via


TransferMode Énumération

Définition

Indique si un canal utilise des modes diffusés en continu ou mis en mémoire tampon pour le transfert de messages de demande et de réponse.

public enum class TransferMode
public enum TransferMode
type TransferMode = 
Public Enum TransferMode
Héritage
TransferMode

Champs

Nom Valeur Description
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 diffusés en continu.

StreamedRequest 2

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

StreamedResponse 3

Le message de requête est mis en mémoire tampon et le message de réponse est diffusé en continu.

Exemples

L’exemple suivant définit la propriété StreamedTcpTransportBindingElement.TransferMode par le biais du 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 par Streamed le biais de 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 permettent de mettre en mémoire tampon que les en-têtes de message et d’exposer le corps du message sous la forme d’un flux, à partir duquel des portions plus petites peuvent être lues à la fois.

L'affectation de Streamed au mode de transfert permet d'assurer la communication en mode de diffusion en continu dans les deux sens. Définir le mode de transfert sur StreamedRequest ou StreamedResponse activer la communication en continu uniquement dans la direction indiquée.

Les transferts diffusés en continu peuvent améliorer la scalabilité d’un service en éliminant la nécessité de mémoires tampons volumineuses. Si la modification du mode de transfert améliore réellement l’extensibilité en pratique dépend de la taille des messages transférés. Les améliorations apportées à l’extensibilité doivent être évidentes lorsque les messages volumineux utilisent en continu au lieu des transferts mis en mémoire tampon.

Par défaut, les transports http, TCP/IP et canal nommé utilisent les transferts de messages mis en mémoire tampon. Vous pouvez définir les valeurs des liaisons fournies par le système à NetNamedPipeBinding l’aide NetTcpBindingBasicHttpBindingdes propriétés du mode de TransferMode 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 défini dans la section de configuration de la liaison.

Pour les liaisons qui n’exposent pas la propriété du mode de transfert, le mode de transfert peut être défini sur l’élément de liaison du transport et cet élément peut ensuite être ajouté à une liaison personnalisée. Par exemple, créez une HttpTransportBindingElement propriété et utilisez la TransferMode propriété 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 de la liaison personnalisée.

La décision d’utiliser des transferts mis en mémoire tampon ou diffusés en continu est une décision locale du point de terminaison pour les transports HTTP. Pour les transports HTTP, le mode de transfert ne se propage pas sur une connexion, ou vers 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 vers un service, vous pouvez (il est autorisé, mais pas obligatoire) modifier le fichier de configuration des services destinés à être utilisés avec des transferts diffusés 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 mode de Streamed transfert entraîne l’application de certaines restrictions au runtime WCF.

  • Les opérations qui se produisent sur un transport en flux peuvent avoir un contrat avec au maximum une entrée et/ou un paramètre de sortie au niveau de la couche de modèle de programmation. Ce paramètre correspond à l’intégralité du corps du message et doit être un Messagesous-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 continu, utilisez la sécurité au niveau du transport uniquement ou utilisez la sécurité en mode mixte, qui combine WS-Security revendications avec la sécurité du transport.

  • Les en-têtes SOAP sont toujours mis en mémoire tampon, même lorsque le mode de transfert est défini Streamedsur . Les en-têtes d’un message ne doivent pas dépasser la taille du quota de transport MaxBufferSize qui est exposé sur les différentes liaisons et éléments de liaison.

La modification du mode de transfert pour BufferedStreamed modifier également la forme de canal natif des transports tcp et 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. En conséquence, les contrats de service avec session ne peuvent pas être utilisés avec le streaming de transport.

S’applique à