2012-03-23 46 views
1

我一直在使用MassTransit來處理電子郵件。使用此代碼:http://meandaspnet.blogspot.com/2009/10/how-to-binary-serialize-mailmessage-for.html我可以將我的電子郵件序列化並將它們發佈到我的服務總線。他們也正確處理。MassTransit二進制序列化消息處理不正確

Bus.Initialize(
       sbc => 
        { 
         sbc.EnableMessageTracing(); 
         sbc.ReceiveFrom("msmq://localhost/MyQueue"); 
         sbc.UseMsmq();       
         sbc.VerifyMsmqConfiguration(); 
         sbc.UseMulticastSubscriptionClient(); 
         sbc.UseBinarySerializer(); 
         sbc.Subscribe(subs => subs.Instance(new MessageHandler())); 
        }); 

現在我添加了一個新的類型和處理程序:

 // Check out the sequence of the Consumes<> ! 
    public class MessageHandler : 
       Consumes<SerializeableMailMessage>.All, 
     Consumes<AangifteOmzetbelasting>.All 
    { 
     public void Consume(AangifteOmzetbelasting message) 
     { 
         // Some code - method will NOT be called 
     } 

     public void Consume(SerializeableMailMessage mailMessage) 
     { 
         // Some code - this method is called by Mass Transit 
     } 
    } 

奇怪的是,這個如果我發表一個SerializableMailMessage工作 - 而不是AangifteOmzetbelasting。如果我改變界面順序 - 它適用於AangifteOmzetblasting,而不適用於SerializableMailMessage。像這樣:

// Check out the sequence of the Consumes<> ! 
     public class MessageHandler : 
     Consumes<AangifteOmzetbelasting>.All, 
     Consumes<SerializeableMailMessage>.All 

在後一種情況下,SerializedMailMessges也不會出現在服務總線上。這兩個使用發佈:

Bus.Instance.Publish(object) 

我在做什麼錯在這裏?

回答

2

發佈消息沒有類型信息是一個真正的鬥爭;類型信息對於路由非常重要。

如果您必須發佈爲object,我們會在這裏看到的是,我們有FastActivator助手,您可以查看(應該在引用的Magnum庫中),這將與Bus.Instance.FastActivator("Publish", message, { message.GetType() })類似。我可能有錯誤的參數順序,但您需要方法名稱,參數和泛型類型參數。

此外,如果您需要,我建議加入MT郵件列表以幫助解決此問題。 https://groups.google.com/forum/#!forum/masstransit-discuss

+0

感謝您的回覆 - 我嘗試使用Publish <>發佈,但根據評論已過時。我不能更改我的發佈方法來提供類型信息嗎? – 2012-03-26 08:10:37

+0

我們使用兩條總線來解決它:一條用於序列化消息,一條用於XML消息。 – 2012-03-27 11:07:04

相關問題