2010-03-21 2 views
0

Итак, я очень ОЧЕНЬ новичок в MSMQ, и я уже смущен.MSMQ пустой объект на теле сообщения

Я создал приватную очередь и добавил несколько сообщений к ней, все до сих пор хорошо. НО, когда я получаю сообщения из очереди, тело сообщения содержит пустой объект типа, который я добавил. Под этим я не имею в виду, что тело равно null, оно имеет ссылку на тип объекта, который я добавил, но он не создается, поэтому все свойства находятся в их нулевом или стандартном состоянии.

Это код, я использую, чтобы добавить в очереди:

using (var mQueue = new MessageQueue(QueueName)) 
{ 
    var msg = new Message(observation) 
    { 
      Priority = MessagePriority.Normal, 
      UseJournalQueue = true, 
      AcknowledgeType = AcknowledgeTypes.FullReceive, 
    }; 
    mQueue.Send(msg); 
} 

И это код, который dequeues сообщения:

using (var mQueue = new MessageQueue(QueueName)) 
{ 
    mQueue.MessageReadPropertyFilter.SetAll(); 
    ((XmlMessageFormatter)mQueue.Formatter).TargetTypes = 
                new[] { typeof(Observation) }; 
    var msg = mQueue.Receive(new TimeSpan(0, 0, 5)); 
    var observation = (Observation)msg.Body; 

    return observation; 
} 

ответ

2

Конструктор Сообщение использует XML-сериализации сериализовать ваш " наблюдения ". Вам нужно убедиться, что это работает правильно. Сериализация XML будет иметь дело только с публичными членами класса, это не приведет к сериализации частных членов. Ваш объект может выглядеть «пустым» после повторного десериализации.

Вот некоторые тестовый код, чтобы убедиться, что он работает правильно:

using System; 
using System.IO; 
using System.Xml.Serialization; 

class Program { 
    static void Main(string[] args) { 
    var ser = new XmlSerializer(typeof(Observation)); 
    var sw = new StringWriter(); 
    var obj = new Observation(); 
    ser.Serialize(sw, obj); 
    Console.WriteLine(sw.ToString()); 
    var sr = new StringReader(sw.ToString()); 
    var obj2 = (Observation)ser.Deserialize(sr); 
    // Compare obj to obj2 here 
    //... 
    Console.ReadLine(); 
    } 
} 
public class Observation { 
    // etc... 
} 
Смежные вопросы