2012-05-29 51 views
1

我們處於一種情況,我們的組件之一是在Nservice總線2.6中開發的。 我們正在努力開發一個使用NSB 3.2的新組件,該組件將從舊服務中消耗。 我們遇到了從NSB 3.2到NSB 2.6組件共享合同的問題。 我們不能馬上遷移舊系統到NSB 3.2,因爲它會很多工作。 有沒有人有類似的問題?NService 2.6消耗Nservice 3.0合同

回答

2

特別是如果你想爲你的3.2消息協定使用Unobtrusive Mode,那麼你會碰到NServiceBus 2.6對於引用NServiceBus.dll版本2.6來訪問IMessage接口的硬性要求。

當然,2.6沒有IEvent和ICommand的概念。

一個解決方案是爲您的3.2消息合約程序集提供雙重項目。

MyPublisher.Events-2-6.csproj 
MyPublisher.Events-3-2.csproj 

每個項目將引用相同的C#文件,但2.6版本將引用2.6 NServiceBus.dll,而3.2版本將引用無論是3.2版本,或者如果使用不顯眼,也許包括額外的文件定義特定於彙編程序的IEvent,ICommand和IMessage接口。當然,您也可以使用名稱空間名稱或其他度量標準的條件來定義這些條件並跳過該步驟。

那麼你可能需要的最後一件事是在您的郵件合同指定版本之間的差異有些#if塊,例如:

#if NSBGT3 
    public void MyEvent : IEvent 
#else 
    public void MyEvent : IMessage 
#endif 
    { 
     // properties 
    } 

全面披露:我沒有嘗試這樣做還沒有我自己,我只是一直認爲這是我將如何去做。試一試併發布一些消息,然後檢查它們,看看消息XML中關於消息適用的類型的內容。這會讓你更好地瞭解NServiceBus 2.6是否能夠正確接受它們,尤其是在關注多態消息處理的時候。當然你也想用3.2客戶端和2.6客戶端進行測試。

祝你好運!

0

我建議在新系統的解決方案連接舊系統的類文件,這樣,他們將與新的NServiceBus二進制文件進行編譯,你會避免版本衝突。