Azure Service Bus队列在获取的消息中提供控制字符

时间:2018-12-07 14:00:09

标签: special-characters biztalk azure-servicebus-queues

我正在使用BizTalk Server SB消息适配器来从Azure Service Bus队列检索消息。我已经成功地(使用相同的适配器)成功地将消息发送到队列中,并从队列中检索消息并进行了进一步处理。

当第三方软件供应商将消息发送到队列中,并且BizTalk Server检索和处理消息时,就会出现问题。然后,我在消息的开头收到以下附加的“标头”信息和控制字符:

Message header including control characters, ACK, BS and SOH

在文本中:@ACKstringBShttp://schemas.microsoft.com/2003/10/Serialization/?$ SOH

似乎存在某种封装的消息,包括用于处理消息到队列确认的标头。

SB消息传递适配器给出了以下初始错误消息:

  

”地址处的WCF服务主机出现故障,因此没有   可以在相应的接收位置接收更多消息。   若要解决此问题,BizTalk Server将自动尝试重新启动   服务主机。”

然后,另一个错误消息:

  

“没有反汇编平台组件可以识别数据。”

有人以前曾遇到过这个问题吗,那是什么原因引起的?字符编码是否可能是此问题的原因?

2 个答案:

答案 0 :(得分:0)

以下是反馈!

事实证明,第三方软件供应商可以将消息发送为流而不是字符串。原来这是一个使用BrokeredMessage对象的.Net应用程序。使用字符串可使消息序列化,并将元数据添加到消息中。使用流,不会发生此类序列化,并且消息保持不变。

因此,问题在于发送到Service Bus Queue时使用了字符串和自动序列化。

答案 1 :(得分:0)

我有旧式Microsoft.ServiceBus.Messaging客户以BrokeredMessage的形式发送<string> Xml内容,并且希望使用最新的Microsoft.Azure.ServiceBus库和Message类型进行接收。 >

使用Encoding.UTF8.GetString(message.Body)我得到了一个不可用的字符串开头 @\u0006string\b3http://schemas.microsoft.com/2003/10/Serialization/��#

我的方法是显式使用XmlDictionaryReader二进制反序列化来撤消旧版库中隐藏的序列化魔术

        private static string GetMessageBodyHandlingLegacyBrokeredMessage(Message message)
        {
            string str = null;
            if (message.ContentType == null)
            {
                using (var reader = XmlDictionaryReader.CreateBinaryReader(
                    new MemoryStream(message.Body),
                    null,
                    XmlDictionaryReaderQuotas.Max))
                {
                    var doc = new XmlDocument();
                    doc.Load(reader);
                    str = doc.InnerText;
                }
            }
            else
                throw new NotImplementedException("Unhandled Service Bus ContentType " + message.ContentType);
            return str;
        }

参考

https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messages-payloads#payload-serialization

https://carlos.mendible.com/2016/07/17/step-by-step-net-core-azure-service-bus-and-amqp/