0

我在序列化来自 Windows Azure ServiceBus 的消息时遇到问题。

当我调用“message.GetBody();” 方法它以某种循环结束,这使我的天蓝色模拟器分配机器上所有可用的内存。

我的代码:

            Microsoft.ServiceBus.Messaging.BrokeredMessage message;
            while (true)
            {
                // SB is an instance of a class which let me receive a BrokeredMessage through its ReceiveMessage method.
                message = SB.ReceiveMessage("orders");
                if (message == null)
                {
                    break;
                }


                // This ends up allocating lots of memory until the debugger crashes.
                Procurement.TestOrder torder = message.GetBody<Procurement.TestOrder>();
            }

二手类:

[MessageContract(IsWrapped=false)]
public class TestOrder
{
    [MessageBodyMember]
    public int companyId { get; set; }
}

我还尝试在 TestOrder-Class 上使用 [DataContract] 和 [DataMember] 属性。

顺便说一句,消息是一个非常简单的 XML 文件,没有任何命名空间从 BizTalk 进入 azure 队列。

这可能存在一些小缺陷,但我看不出序列化程序陷入循环的任何原因。

提前致谢!

4

2 回答 2

0

要进行快速测试,请尝试在 message.GetBody 之后添加 Thread.Sleep(10)。我在本地 Azure 模拟器上遇到了类似的问题,这个简单的技巧解决了它。

于 2012-01-03T15:43:10.327 回答
0

[DataContract]您在使用和[DataMember]尝试反序列化时收到什么错误?如果你只是做包含什么Stream s = message.GetBody<Stream>();s

如果字符串的有效负载是 text/XML 而不是二进制序列化 XML,您可能需要像这样传递 DataContractSerializer:

torder = message.GetBody<TestOrder>(new DataContractSerializer(typeof(TestOrder)));
于 2012-01-04T18:18:58.670 回答