2013-11-22 71 views
0

我試圖將代理消息發送到服務總線,並且希望消息是多種類型的列表。我試過使用接口以及對象,並且它工作正常,直到我添加多個類型到列表。我閱讀了幾篇關於做類似的文章和在線文章,他們似乎都是專門做手動xml seralization或使用WCF。在這種情況下,分散是自動發生的。如何發送其他類型的列表的代理消息

我的代碼是像這樣:

Queue<Object> x = new Queue<Object>(); 
        x.Enqueue(new VRequest()); 
        x.Enqueue(new PRequest()); 
        ServiceBus.TrackerClient.SendAsync(new BrokeredMessage(x) { ContentType = "BulkRequest" }); 

然後我的經紀人的消息處理程序(其中發生seralization錯誤):

var bulk = message.GetBody<Queue<Object>>(); 

如何我可以給一個單一的代理消息與任何想法多種類型?

回答

0

對於任何有興趣的人可以使用二進制格式化程序和內存流來完成此操作。因爲您正在使用二進制數據,所以它非常靈活...您甚至可以使用接口等。一旦擁有內存流,您將需要轉換爲字節數組,以便您可以通過網絡發送它。然後你可以在另一端反序列化它。還要確保你標記你的對象是可序列化的。

 BinaryFormatter formatter = new BinaryFormatter(); 
     MemoryStream stream = new MemoryStream(); 
     Queue<IYodas> q = new Queue<IYodas>(); 
     q.Enqueue(new Yoda()); 
     q.Enqueue(new Yoda2()); 

     formatter.Serialize(stream, q); 
     Byte[] package = stream.ToArray(); 

     // Send broker message using package as the object to send 
     .... 

     // Then on the other end (you will need a byte array to object function) 
     Queue<IYodas> result = (Queue<IYodas>)ByteArrayToObject(package); 
+0

你可以在這裏找到一個bytearraytobject方法:http://www.digitalcoding.com/Code-Snippets/C-Sharp/C-Code-Snippet-Byte-array-to-object.html – KingOfHypocrites

相關問題