El modo de transmisión de tubería es un concepto de sistema operativo Windows, no un concepto .NET. Si se crea una tubería en el modo Mensaje, cada escritura en la tubería por parte del remitente se trata como un mensaje separado. El receptor puede leer desde el tubo o bien:
- en modo Byte, cuando los datos se leen desde la tubería como un flujo de bytes, ignorando por completo los límites mensaje implícito; o
- en modo Mensaje, cuando los datos se leen como una secuencia de mensajes, en el sentido de que cualquier lectura solo recibirá bytes relacionados con un solo mensaje, y la API nativa devuelve un código de error especial para indicar si hay otros bytes que se recibirán para ese mismo mensaje.
La envoltura .NET de esta funcionalidad, como surgido en el espacio de nombres System.IO.Pipes
, sigue el modelo nativo subyacente bastante de cerca:
- mensaje límites siguen siendo determinada por el patrón de las llamadas realizadas por el remitente a
PipeStream.Write()
o PipeStream.WriteByte()
- los datos escritos en cada llamada se tratan como un mensaje distinto ;
- el receptor puede establecer
ReadMode
a PipeTransmissionMode.Message
, y después de cada llamada a PipeStream.Read()
o PipeStream.ReadByte()
leerá el siguiente fragmento de los datos del mensaje actual, hasta que el valor de PipeStream.IsMessageComplete
cambios a true
, lo que indica que todos los bytes para que el mensaje tienen leído
Todas las lecturas y escrituras se realizan en términos de bytes o matrices de bytes. Puede enviar los bytes que desee a través de una tubería. El modo de transmisión no tiene nada que ver con esto.
Por lo tanto, sí, puede enviar un objeto serializado como un mensaje, siempre que escriba todos los bytes de su representación serializada en una sola llamada al PipeStream.Write()
.
He publicado una explicación completa de este problema y una solución mejor aquí: http://stackoverflow.com/q/32739224/3418322 –