有人可以澄清PipeTransmissionMode.Message.NET中的含义吗?
.NET如何区分通过管道传递的一条消息?
BinaryFormatter,然后将其作为消息传递给管道吗?PipeTransmissionMode.Message模式时允许的字符串消息?Chr*_*son 54
管道传输模式是Windows操作系统概念,而不是.NET概念.如果在"消息"模式下创建管道,则发件人对管道的每次写入都将被视为单独的消息.接收器可以从管道中读取:
这个功能的.NET包装,如System.IO.Pipes命名空间中所示,非常接近底层本机模型:
PipeStream.Write()或者
PipeStream.WriteByte()- 每次呼叫中写入的数据被视为不同的消息;ReadMode为
PipeTransmissionMode.Message,然后每次调用PipeStream.Read()或PipeStream.ReadByte()将从当前消息中读取下一个数据块,直到PipeStream.IsMessageComplete更改为的值true,表示该消息的所有字节都已被读取所有读取和写入都是按字节或字节数组完成的.您可以在管道中发送您喜欢的任何字节.TransmissionMode与此无关.
所以,是的,您可以将序列化对象作为消息发送,前提是您在一次调用中将其序列化表示的所有字节写入管道PipeStream.Write().
花了一些时间来找到在PipeDirection.InOut模式下创建服务器和客户端所需的重要细节:
这可能是奇怪,但出于某种原因,NamedPipeServerStream必须以创建PipeDirection的参数InOut,以便PipeTransmissionMode.Message工作.这不仅没有直接记录,而且报告错误的方式完全违反直觉,并且似乎与管道无关TransmissionMode.
否则你会得到例外:
试图连接到管道... System.UnauthorizedAccessException:
拒绝访问该路径.
Run Code Online (Sandbox Code Playgroud)at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.Pipes.PipeStream.WinIOError(Int32 errorCode) at System.IO.Pipes.PipeStream.set_ReadMode(PipeTransmissionMode value)