0

我正在尝试使用我在 C# .NET 上编写的客户端应用程序向 ActiveMQ 服务器发送消息。我有已转换为 Zip 流并尝试发送的 XML 消息。

public IMessage SendMessage(string mqUri, string brokerUri, MemoryStream message, string username, string password)
    {
        Uri connecturi = new Uri(mqUri);

        IConnectionFactory factory = new NMSConnectionFactory(connecturi);

        using (IConnection connection = factory.CreateConnection(username, password))
        using (ISession session = connection.CreateSession())
        {
            IDestination destination = SessionUtil.GetDestination(session, brokerUri);

            using (IMessageProducer producer = session.CreateProducer(destination))
            {
                connection.Start();
                IBytesMessage request = session.CreateBytesMessage(message.ToArray());
                producer.Send(request);

                return request;
            }
        }
    }

在服务器端解析数据时出现异常,例如:

JMS 消息侦听器的执行失败。原因:[org.apache.camel.RuntimeCamelException - 无法提取正文,原因是:javax.jms.JMSException:无法从字节构建正文。原因:java.io.StreamCorruptedException:无效的流标头:00010000。消息:ActiveMQObjectMessage。

当我调试代码并设置断点时,Bodylength 上出现异常,并且内容说“request.Content”引发了“Apache.NMS.MessageNotReadableException”类型的异常

在此处输入图像描述

在 ActiveMQ 服务器上发送消息是否有任何特殊的 zip 转换?请帮忙。谢谢

4

1 回答 1

0

问题是将 zip 转换为memorystream,后来我发现它需要将 .xml 文件转换为zipstream而不是 zip 文件。

public static MemoryStream CreateZipStream()
    {
        using (ZipFile zip = new ZipFile())
        {
            MemoryStream outputStream = new MemoryStream();
            outputStream.Seek(0, SeekOrigin.Begin);
            string filePath =
                @"C:\YourXml.xml";
            zip.AddFile(filePath);
            zip.Save(outputStream);
            return outputStream;
        }
    }
于 2017-01-26T09:26:58.770 回答