2010-04-14 56 views
1

這是我的方法要發送消息給一個私用Q無法讀取MSMQ串行化的數據作爲消息體C#3.0

using (MessageQueue msgQ = new MessageQueue(MessageQueueName)) 
     { 
      using (System.Messaging.Message newMessage = new System.Messaging.Message(MessageBody, 
       new System.Messaging.ActiveXMessageFormatter())) 
      { 
       newMessage.Label = MessageLabel; 
       newMessage.Priority = Priority; 
       msgQ.Send(newMessage); 
      } 

     } 

我有一個順序物體我序列併發送作爲消息體。該序列化對象是

<?xml version="1.0"?> 
<OrderInfo> 
    <OrderID>11111</OrderID> 
    <OrderDetails> 
     <LineItem> 
      <ProductDetails> 
       <Name>qwqwqw</Name> 
       <Manufacturer>asasas</Manufacturer> 
       <UPC>12222222222</UPC> 
       <sku>2132</sku> 
       <Price>12.21</Price> 
      </ProductDetails> 
      <Quantity>1</Quantity> 
     </LineItem> 
    </OrderDetails> 
</OrderInfo> 

這是我的方法來接收該消息在一個窗口服務

​​

,當我嘗試看看m.Body在這個快速監視是什麼狀態

m.Body.Message =找不到能夠閱讀此信息的格式化程序。

m.Body.StackTrace =在System.Messaging.Message.get_Body()

回答

3

但願你不是仍然停留在這一點,但運行到同樣的問題,當它來到了頂我的搜索。

由於沒有人回答它,這裏有一個答案,我剛剛發現其他地方(謝謝TechRepublic)。這段代碼假定「MyType」是一個典型的基本消息,可以通過XML序列化讀取 - 這意味着它被標記爲可序列化的,並且所有要發送/重建的數據都在public get/set屬性中。

代碼是:

MessageQueue msgQ = new MessageQueue(@".\private$\CreateNewEntity"); 

msgQ.Formatter = new XmlMessageFormatter(new []{typeof(MyType)});    
var msg = msgQ.Receive(); 

msgQ.Close(); 
return msg.Body as MyType;