我使用 XMS.Net(Framework V4)成功地从 IBM MQ(8.0.0.6)获取消息。我需要解释对象中的消息正文,但出现以下错误:输入流不是有效的二进制格式。起始内容(以字节为单位)为:AC-ED-00-05-73-72-00-2F-73-61-2E-63-6F-6D-2E-62-61 ...
这是我的代码。
private void OnNewMessageCallback(IMessage message)
{
//object objectMessage = (object)message;
if (message is IBytesMessage)
{
try
{
IBytesMessage byteMessage = message as IBytesMessage;
byte[] bytesBody = new byte[(int)byteMessage.BodyLength];
byteMessage.ReadBytes(bytesBody);
BinaryFormatter binForm = new BinaryFormatter();
MemoryStream memStream = new MemoryStream();
memStream.Write(bytesBody, 0, bytesBody.Length);
memStream.Position = 0;
Object obj = (Object)binForm.Deserialize(memStream); // Here am getting error
}
catch(Exception ex)
{
Console.WriteLine(ex);
}
}
下面是从 MQ 收到的消息。
JMSMessage class: jms_bytes
JMSType:
JMSDeliveryMode: NonPersistent
JMSExpiration: 0
JMSPriority: 0
JMSMessageID: ID:414d51204d574c4f47514d47522020205fe9cfb912e46bc1
JMSTimestamp: 1610890018830
JMSCorrelationID:
JMSDestination:
JMSReplyTo:
JMSRedelivered: False
JMS_IBM_Character_Set: 819
JMS_IBM_Encoding: 273
JMS_IBM_Format:
JMS_IBM_MsgType: 8
JMS_IBM_PutApplType: 28
JMS_IBM_PutDate: 20210117
JMS_IBM_PutTime: 13265883
JMSXAppID: PreLauncher
JMSXDeliveryCount: 1
JMSXUserID: MQ
aced00057372003773612e636f6d2e62616a2e6672616d65776f726b2e6c69627261726965732e45
7863657074696f6e5472616e73616374696f6e496e666f00000000000000010200044c000c66756e
6374696f6e4e616d657400124c6a6176612f6c616e672f537472696e673b4c00096d657373616765
496471007e00014c000b736572766963654e616d6571007e00014c000a737461636b547261636571
007e000178707074002430626664353666642d303661352d346463372d383731632d636364356631
3836333038657400094652414d45574f524b740dd543617573653a0a0a0a4d6573736167653a0a53
6572766963652069732068696464656e0a0a537461636b2054726163653a0a6174202e7365727669
6365496e666f436865636b7328506970656c696e652e6a6176613a333836290a6174202e50726f63
65737328506970656c696e652e6a6176613a313338290a6174202e696e766f6b65286e756c6c3a2d
31290a6174202e696e766f6b652844656c65676174696e674d6574686f644163636573736f72496d
下面是用于将对象放入队列的 JAVA 代码。
public void insertLogInMQ_V2(MyTranInfo mytranobj)
{ MQMessage obj = new MQMessage();
long wriObj = (new Date()).getTime();
obj.writeObject(mytranobj);
MQPutMessageOptions pmo = new MQPutMessageOptions();
pmo.options |= 0x10000;
mqQueue.put(obj, pmo);
}