Message.GetBody ();Цикл сериализации - PullRequest
0 голосов
/ 03 января 2012

У меня проблема с сериализацией сообщения из 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.

В этом могут быть небольшие недостатки, но я не вижу причин, по которым сериализатор может застрять в цикле.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 04 января 2012

Какую ошибку вы получаете при использовании [DataContract] и [DataMember] для попытки десериализации? Если вы просто делаете Stream s = message.GetBody<Stream>();, что s содержит?

Если полезная нагрузка строки - текст / XML, в отличие от двоичного сериализованного XML, вам, вероятно, потребуется передать DataContractSerializer следующим образом:

torder = message.GetBody<TestOrder>(new DataContractSerializer(typeof(TestOrder)));
0 голосов
/ 03 января 2012

Чтобы сделать быстрый тест, попробуйте добавить Thread.Sleep (10) после сообщения. GetBody.У меня была похожая проблема с локальным эмулятором Azure, и этот простой трюк решил ее.

...