2013-08-26 61 views
1

我正在使用「自定義」對象生成器(Autofac),因此我可以重新使用我在常用程序集中完成的許多類型的註冊。當我運行服務,內NServiceBus.Host.exe主持,我得到以下錯誤:NServiceBus IoC序列化異常

SerializationException是未處理:

組裝

類型「Autofac.Core.Registration.ComponentNotRegisteredException「Autofac,版本= 3.0 .0.0,Culture = neutral,PublicKeyToken = 17863af14b0044da'未標記爲可序列化。

這對我來說似乎很奇怪,因爲NServiceBus默認使用Autofac,並沒有這個問題。

我使用Autofac v 3.1.1和4.0.3 NServiceBus

+0

你使用多個'AppDomains'嗎?異常是跨邊界序列化的,所以這可能是爲什麼失敗似乎是由於缺少序列化屬性。但是,我同意@ Travis-illig,潛在的問題很可能是因爲缺少註冊。 –

回答

3

這是真的,該ComponentNotRegisteredException沒有標記序列化 - 便攜式類庫不支持SerializableAttribute和Autofac 3.0+是PCL。

我猜你遇到的更大的問題不是SerializationException導致它的問題 - 你的自定義代碼中的東西沒有註冊,所以當某種類型得到解決時,它可以'因此,Autofac拋出ComponentNotRegisteredException和NServiceBus試圖序列化它。

而不是試圖解決序列化問題,我會開始尋找ComponentNotRegisteredException的來源,並專注於此。

+0

我打算仔細研究並繼續調查。 – Flea

+0

事實證明,這不是我的依賴之一,沒有正確註冊;它是NServiceBus的一個(當它註冊一個單身人士時)。我能夠更好地實現該方法的包裝,現在它正在工作。感謝您的建議。同樣,約翰西蒙斯的回答在解決問題方面非常有幫助。我也想給他的答案,但只能選一個。 – Flea

2

診斷這類問題的最簡單方法是打開Visual Studio中的所有異常並查看第一次繁瑣的位置。
9/10是初始化代碼的問題。

+0

我正在通過您的建議。 – Flea

+1

問題出現時,它不會發生在開發中,但只在生產中,在客戶。除了猜測之外,調試還沒有被取代,因爲沒有任何合理的信息來自異常。 –

0

我在使用NServiceBus 4.4.2將NServiceBus.Distributor.Msmq(4.4.2)添加到舊的解決方案時遇到了類似的錯誤。原來我忘了爲新項目設置NSB許可證。試圖啓動分發器扔了這個,直到我在構建輸出中包含一個有效的License.xml文件:

未處理的異常:System.Runtime.Serialization.SerializationException:在程序集'NServiceBus.Core中鍵入'Autofac.Core.DependencyResolutionException' ,Version = 4.4.0.0,Culture = neutral PublicKeyToken = 9fc386479f8a226c'未標記爲可序列化。