2012-12-27 44 views
1

我有一個基本的Microsoft Message Queue實現以下問題:微軟的MessageQueue格式化屬性始終是空

在閱讀方面的消息Formatter屬性總是空,無論在發送方是我輸入。

發送代碼:

System.Messaging.Message m = new System.Messaging.Message("string to send"); 
m.Formatter = new XmlMessageFormatter(new Type[1] { typeof(string) }); 
queue.Send(m, "label"); 

接收代碼:

MessageEnumerator enumerator = queue.GetMessageEnumerator2(); 
while (enumerator.MoveNext()) 
{ 
    Message m = enumerator.RemoveCurrent(); 
    Console.WriteLine("MSQ: " + m.Label); 

    Console.WriteLine("Formatter: " + m.Formatter.GetType().ToString()); // crash because formatter property is null 

    Console.WriteLine("Body: " + m.Body); //also crashes since formatter is null 
} 

由於Formatter爲null,我也不能得到​​這正是我最需要的。

+0

可是......消息「反序列化」使用** **的MessageQueue Formatter屬性,不是嗎?如果是這樣,你是否已經在接收代碼中初始化了MessageQueue.Formatter屬性(** queue **。Formatter)? –

+0

@JuanMellado:不,我沒有。實際上我認爲這是自動完成的,因爲在文檔中它說它默認爲XmlMessageFormatter – clamp

+0

是的,但你仍然可以執行'((XmlMessageFormatter)queue.Formatter).TargetTypes = new Type [1] {typeof(string)}; [未經測試] –

回答

4

消息是反序列化的使用MessageQueue.Formatter屬性。所以,你必須初始化在接收代碼MessageQueue.Formatter屬性(隊列 .Formatter):

((XmlMessageFormatter)queue.Formatter).TargetTypes = new Type[1] { typeof(string) }; 
+0

謝謝。需要等待24小時才能獎賞賞金。 – clamp