0

我使用 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);
    }
4

0 回答 0