Message.GetBody ();序列化循环
本文关键字:序列化 循环 GetBody Message | 更新日期: 2023-09-27 18:19:15
我在序列化来自Windows Azure ServiceBus的消息时遇到问题。
当我调用"message.GetBody();"方法时,它会以某种循环结束,这使得我的azure模拟器分配了机器上所有可用的内存。
我代码: 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; }
}
我也尝试使用[DataContract]和[DataMember]属性的TestOrder-Class。
顺便说一下,消息是一个非常简单的xml文件,没有任何名称空间,从BizTalk到azure的队列。
这可能有一些小缺陷,但我不认为序列化器有任何理由陷入循环。
提前感谢!
使用[DataContract]
和[DataMember]
尝试反序列化时收到什么错误?如果你只做Stream s = message.GetBody<Stream>();
, s
包含什么?
如果字符串的有效载荷是text/XML,而不是二进制序列化的XML,则可能需要传入一个DataContractSerializer,如下所示:
torder = message.GetBody<TestOrder>(new DataContractSerializer(typeof(TestOrder)));
要进行快速测试,请尝试在message.GetBody之后添加Thread.Sleep(10)。我在使用本地Azure模拟器时遇到了类似的问题,这个简单的技巧解决了这个问题。