Comment : activer la diffusion en continu
Windows Communication Foundation (WCF) peut envoyer des messages utilisant des transferts par mise en mémoire tampon ou par diffusion en continu. En mode de transfert par mise en mémoire tampon, un message doit être complètement remis avant qu'un récepteur puisse le lire. En mode de transfert par diffusion en continu, le récepteur peut commencer à traiter le message avant qu'il ne soit complètement remis. Le mode de diffusion en continu est utile lorsque les informations passées sont volumineuses et peuvent être traitées en série. Le mode de diffusion en continu est également utile lorsque le message est trop volumineux pour être mis entièrement en mémoire tampon.
Pour activer la diffusion en continu, définissez le OperationContract convenablement et activez la diffusion en continu au niveau du transport.
Pour transmettre des données en continu
Pour transmettre des données en continu le OperationContract du service doit satisfaire deux spécifications :
- Le paramètre qui gère les données diffusées en continu doit être le seul paramètre dans la méthode. Par exemple, si le message d'entrée est celui à diffuser en continu, l'opération ne doit contenir qu'un seul paramètre d'entrée. De la même façon, si le message de sortie doit être diffusé en continu, l'opération ne doit avoir qu'un seul paramètre de sortie ou qu'une seule valeur de retour.
- Au moins l'un des types de paramètre et de valeur de retour doit être Stream, Messageou IXmlSerializable.
Ce qui suit est un exemple de contrat de diffusion des données en continu.
L'opération
GetStream
reçoit des données d'entrée mises en mémoire tampon sous la forme d'une chaîne (string
) mise en mémoire tampon et retourneStream
, soit des données diffusées en continu. Inversement,UploadStream
prendStream
(diffusion en continu) et retournebool
(mise en mémoire tampon).EchoStream
prend et retourneStream
et constitue un exemple d'opération dont les messages d'entrée et de sortie sont tous deux diffusés en continu. Enfin,GetReversedStream
ne prend pas d'entrée et retourneStream
(diffusion en continu).La diffusion en continu doit être activée sur la liaison. Affectez à une propriété TransferMode l'une des valeurs suivantes :
- Buffered,
- Streamed, qui active la communication par diffusion en continu dans les deux directions.
- StreamedRequest, qui active la diffusion en continu de la demande uniquement.
- StreamedResponse, qui active la diffusion en continu de la réponse uniquement.
La BasicHttpBinding expose la propriété TransferMode sur la liaison, tout comme NetTcpBinding et NetNamedPipeBinding. La propriété TransferMode peut également être définie sur l'élément de liaison de transport et utilisée dans une liaison personnalisée.
Les exemples suivants indiquent comment définir le TransferMode par code et en modifiant le fichier de configuration. Les exemples attribuent également à la propriété
maxReceivedMessageSize
la valeur 64 Mo, qui limite la taille maximale autorisée des messages en réception. La valeur par défaut demaxReceivedMessageSize
est 64 Ko, ce qui est habituellement trop bas pour les scénarios de diffusion en continu. Définissez ce paramètre de quota correctement selon la taille maximale des messages que votre application est susceptible de recevoir. Notez également que la maxBufferSize contrôle la taille maximale mise en mémoire tampon ; il convient de définir convenablement cette valeur.- L'extrait de code de configuration suivant tiré de l'exemple présente l'affectation du mode de diffusion en continu à la propriété TransferMode sur la basicHttpBinding et sur une liaison HTTP personnalisée.
- L'extrait de code suivant affiche l'affectation à la propriété TransferMode la diffusion en continu sur la basicHttpBinding et sur une liaison HTTP personnalisée.
- L'extrait de code suivant affiche l'affectation à la propriété TransferMode de la diffusion en continu une liaison TCP personnalisée.
Les opérations
GetStream
,UploadStream
etEchoStream
concernent toutes l'envoi de données directement à partir d'un fichier ou l'enregistrement des données reçues directement dans un fichier. Le code suivant concerneGetStream
.
Écriture d'un flux personnalisé
Pour effectuer un traitement spécial sur chaque bloc d'un flux alors qu'il est envoyé ou reçu, dérivez une classe de flux personnalisé de Stream. Pour donner un exemple d'un flux personnalisé, le code suivant contient une méthode
GetReversedStream
et une classeReverseStream
-.GetReversedStream
crée et retourne une nouvelle instance deReverseStream
. Le traitement réel se produit lorsque le système lit l'objetReverseStream
. La méthodeReverseStream.Read
lit un bloc d'octets du fichier sous-jacent, les inverse, puis retourne les octets inversés. Cette méthode n'inverse pas l'ensemble du contenu du fichier, mais uniquement un bloc d'octets à la fois. Cet exemple montre comment vous pouvez traiter un flux pendant que le contenu est lu ou écrit à partir du flux.
Voir aussi
Concepts
Données volumineuses et diffusion en continu