You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用IBM MQ .NET XMS读取字节消息报长度错误如何解决

报错原因

你遇到的IBM.XMS.MessageEOFException异常核心原因是ReadUTF()方法的适用场景不匹配:ReadUTF()是JMS规范中专门用来读取对端用WriteUTF()方法写入的内容,该方法会默认先读取消息前2个字节作为字符串长度,再按该长度读取后续内容。如果你的消息发送端没有用WriteUTF()写入,就会出现读取长度和实际消息长度不符,触发读超界报错。

解决方案

C#版本的IBM XMS库中,对应Java getBodyLength()方法的是**IBytesMessage.BodyLength属性**,不是方法,你可以按以下逻辑改写代码:

var msg = (IBytesMessage)message;
// 重置消息体读取指针到开头,避免之前的操作移动过指针
msg.Reset();
// 获取消息体总长度
int bodyLength = (int)msg.BodyLength;
byte[] bodyBytes = new byte[bodyLength];
// 按长度读取全部字节
msg.ReadBytes(bodyBytes, bodyLength);
// 直接转UTF8字符串,不需要额外转码
string plainText = System.Text.Encoding.UTF8.GetString(bodyBytes);

补充说明

  • 不要用ReadUTF()先读字符串再转字节,直接读取原始字节数组再转编码的逻辑更稳定,也能避免发送端编码不匹配导致的乱码问题
  • 如果你确认发送端确实是用WriteUTF()写入的消息,也可以直接调用ReadUTF()读取,不需要手动读字节,但是要保证发送端和接收端的写入、读取逻辑完全对齐。

内容的提问来源于stack exchange,提问作者Nirjal Khadka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:15:02