从deadletter中读取时,Cloudfx发布的消息会出现序列化错误

时间:2014-08-12 22:01:48

标签: azureservicebus cloudfx

我正在使用cloudx框架发布者订阅者机制来通过azure主题/订阅处理消息。

部分已过期的邮件已移至DeadletterQueue。当我尝试使用MessageReceiver读取这些死信消息时,我收到序列化错误。

var msgReceiver = msgFactory.CreateMessageReceiver(deadletterPath);
BrokeredMessage msg = msgReceiver.Peek(); 
UserExitMessage deadLetterObject = msg.GetBody<UserExitMessage>();   

似乎cloudfx框架修改(或编码)消息,因此它们无法正确反序列化。

任何帮助都会受到赞赏,因为我被困了很长时间。

P.S。 - 只有使用cloudfx发布的消息才会出现此问题,因为使用TopicClient代码发送的死信消息可以正常工作。

2 个答案:

答案 0 :(得分:0)

我不确定编码

var messageBody = new StreamReader(msg.GetBody<Stream>(), Encoding.UTF8).ReadToEnd();

但是这将从服务总线获取编码消息。

答案 1 :(得分:0)

默认情况下,CloudFx在向主题发布消息时使用压缩序列化程序。这是为了确保最佳的消息有效载荷大小。此序列化由CloudStorageEntitySerializer类实现。如果您没有提供自定义序列化器,则发布到SB主题的所有消息都将通过前面提到的标准序列化器。

要直接使用SB API消费消息,只需将其主体读取为Stream,然后将返回的流传递给CloudStorageEntitySerializer提供的Deserialize方法。这应该产生预期的结果。