【发布时间】:2021-11-10 10:46:20
【问题描述】:
我有一个用于获取 IBM mq 消息的 C# 客户端。我正在尝试从队列中读取字节消息。但我收到以下错误。
IBM.XMS.MessageEOFException: CWSMQ0136I: 尝试读取超出消息末尾的内容。 已尝试阅读超出消息末尾的内容。如果应用程序已被编码为使用 JMS 1.0.2 规范读取可变长度数据,这可能是正常情况。 如有必要,重新编码应用程序以使用新的 getBodyLength 方法。 在 IBM.XMS.Client.Impl.XmsBytesMessageImpl.ReadUTF()
我在 C# 中尝试了以下代码,
var msg = (IBytesMessage)message;
var result = msg.ReadUTF();
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(result);
错误提示我使用 getBodyLength() 在java中我见过
byte[] uploadPayload = null;
BytesMessage bytesMessage = (BytesMessage) receivedMessage;
uploadPayload = new byte[(int) bytesMessage.getBodyLength()];
bytesMessage.readBytes(uploadPayload);
但是我如何在 C# 中做到这一点。我看到它的 GetBodyLength 不可用?
【问题讨论】:
-
如果传入消息包含 UTF-8 编码数据,则必须使用 ReadUTF 方法。如果消息正文是使用 WriteUTF 方法写入的,通常使用 ReadUTF。如果数据不是 UTF-8 编码的,您应该考虑使用其他 ReadBytes、ReadInt 等方法从 IBytesMessage 读取数据。
-
嗨@Sashi 我试过 ReadInt() 来获取 bodylength 但它不正确。有没有办法获取字节长度