58 votes

PipeTransmissionMode.Message: Comment faire .NET des canaux nommés distinguer entre les messages?

Quelqu'un peut-il préciser le sens de l' PipeTransmissionMode.Message dans .NET?

Comment ne .NET de distinguer l'un message transmis à travers le tuyau de l'autre?

  • Puis-je sérialiser un objet à l'aide d'un BinaryFormatter , puis de passer à travers le tuyau comme un message?
  • Ou ne le sont que de la chaîne de messages autorisés lorsque le tube est en PipeTransmissionMode.Message mode?

71voto

Chris Dickson Points 8066

Le tuyau de mode de transmission est un système d'exploitation Windows concept, pas une .NET concept. Si un canal est créé dans le Message de mode, chaque écriture à la conduite par l'expéditeur est considéré comme un message. Le récepteur peut lire à partir du tuyau, soit:

  • en mode Octet, lorsque les données sont lues à partir de la pipe comme un flux d'octets, en ignorant complètement le message implicite des limites; ou
  • en mode Message, lorsque des données sont lues comme un flux de messages, dans le sens que toute la lecture de seulement recevoir des octets relatives à un seul message et un code d'erreur est retourné par l'API native pour indiquer si il y a plus d'octets à recevoir pour le même message.

L' .NET de l'emballage de cette fonctionnalité, comme l'ont fait surface dans l' System.IO.Pipes d'espace de noms, suit le natif sous-jacent modèle assez proche:

  • message limites sont toujours déterminé par le motif de l'appel effectué par l'expéditeur à PipeStream.Write()ou PipeStream.WriteByte() - les données écrit lors de chaque appel est traité comme un distinct message;
  • le récepteur peut définir ReadModede PipeTransmissionMode.Message, puis de chaque appel d' PipeStream.Read() ou PipeStream.ReadByte() permettra de lire le prochain bloc de données du message actuel, jusqu'à ce que la valeur de PipeStream.IsMessageComplete change à true, ce qui indique que tous les octets pour que le message a été lu

Toutes les lectures et écritures sont faites en termes d'octets ou de tableaux d'octets. Vous pouvez envoyer ce octets vous le souhaitez vers le bas d'un tuyau. Le TransmissionMode n'a aucune incidence sur le présent.

Donc, oui, vous pouvez envoyer un objet sérialisé comme un message, à condition que vous écrivez tous les octets de sa représentation sérialisée à la conduite, en un seul appel à l' PipeStream.Write().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X