向MSMQ发送消息时出现问题

本文关键字:问题 消息 MSMQ | 更新日期: 2023-09-27 18:25:46

我有一个场景,在该场景中,我必须以消息头+有效负载的格式向下面的msmq发送消息。以下是示例。

        Person Message
        <? Xml version="1.0"?>
        <Person>
        <Employee>
         <Name>Manthan</name>
        </employee>
        </Person>

如何将上述消息发送到msmq,我已经尝试了所有可能的解决方案,但仍然没有成功。任何帮助都将不胜感激。提前感谢

以下是代码

       StringBuilder sb = new StringBuilder();
       sb.Append("Person Message"); 
       sb.Append("<?XML Version='"1.0'">");
       sb.Append("<Person>");
       sb.Append("<Employee>");
       sb.Append("<Name>Manthan</Name>");
       sb.Append("</Employee>");
       sb.Append("</Person>");
      MessageQueue  msMq = new MessageQueue(MQPath);
      msmq.Send(sb.tostring());

MSMQ中的输出是

        <?xml version="1.0"?>
         <string>Person Message&lt;?XML       Version="1.0"&gt;&lt;Person&gt;&lt;Employee&gt;&lt;Name&gt;Manthan&lt;/Name&gt;&lt;/Employee&gt;&lt;/Person&gt;</string>

上面的消息与预期输出不一样如何获得预期输出

向MSMQ发送消息时出现问题

MSMQ将消息放入SOAP中,您必须对结果进行反序列化……

MessageQueue  msMq = new MessageQueue(MQPath);
msmq.Send(sb.tostring());
Message[] msgs = msMq.GetAllMessages();
foreach (var msg in msgs)
      {
            System.IO.StreamReader reader = new System.IO.StreamReader(msg.BodyStream);
            MSGtext = reader.ReadToEnd();
            string MSGValue = (string)XmlDeserializeFromString(MSGtext);
        }
 }
 public object XmlDeserializeFromString(string objectData)
    {
        var serializer = new XmlSerializer(typeof(string));
        object result;
        using (TextReader reader = new StringReader(objectData))
        {
            result = serializer.Deserialize(reader);
        }
        return result;
    }

您将不得不创建一个自定义消息格式化程序

        StringBuilder sb = new StringBuilder();
         sb.Append("Person Message");
         sb.Append("<?XML Version='"1.0'">");
         sb.Append("<Person>");
         sb.Append("<Employee>");
         sb.Append("<Name>Manthan</Name>");
         sb.Append("</Employee>");
         sb.Append("</Person>");
         //write to Queue
         msMq.Formatter = new ActiveXMessageFormatter();
         msMq.Send(sb.ToString());
         //read From Queue
         MessageQueue  msMqReader = new MessageQueue(MQPath);
         msMqReader.Formatter = new ActiveXMessageFormatter();         
         Message msg = msMqReader.Receive();
         Console.WriteLine(msg.Body);

}