【问题标题】:MQMessage.ReadString gives error "Unable to read beyond the end of the stream in mscorlip"MQMessage.ReadString 给出错误“无法在 mscorlip 中读取超出流的末尾”
【发布时间】:2016-06-22 22:00:24
【问题描述】:
使用以下代码:
System.Console.WriteLine(mqMsg.ReadString(mqMsg.MessageLength))
Dim InfoMsg As String = SmqMsg.ReadString(mqMsg.MessageLength)
第一行工作正常并将 MQMessage 写入控制台,但第二行给出异常:
无法读取 mscorlib 中流的末尾以外的内容
有什么问题?
【问题讨论】:
标签:
vb.net
ibm-mq
bytebuffer
mq
【解决方案1】:
MQMessage.ReadString(length) 将消息正文中的光标前移length 字节。例如,如果消息体长度为 100 字节,则第一个 ReadString(50) 会将光标前进到 51st 字节,以便下一个 ReadString 调用将从 51st 字节读取。
在您的情况下,第一条语句 System.Console.WriteLine(mqMsg.ReadString(mqMsg.MessageLength)) 正在读取整个邮件正文。由于已读取整条消息且光标超出消息长度,因此第二条语句Dim InfoMsg As String = SmqMsg.ReadString(mqMsg.MessageLength) 会引发异常。
你可以修改如下代码
Dim InfoMsg As String = SmqMsg.ReadString(mqMsg.MessageLength)
System.Console.WriteLine(InfoMsg)