2012-12-18 20 views
0

我正在使用NServiceBus 3.3.3。我使用Ninject作爲我的容器,我通過結合以下方法初始化一個模塊中的總線:嘗試在WCF服務中啓動NServiceBus實例時發生空運輸

Bind<IBus>().ToMethod(context => 
{ 
    return CreateBus(); 
}).InSingletonScope(); 



private IBus CreateBus() 
{ 
    var bus = NServiceBus.Configure.With() 
    .NinjectBuilder(this.Kernel) 
    .DefineEndpointName("MyEndpointName") 
    .MsmqTransport() 
    .IsTransactional(true) 
    .PurgeOnStartup(false) 
    .DisableRavenInstall() 
.DisableTimeoutManager() 
    .InMemorySubscriptionStorage() 
    .XmlSerializer() 
    .UnicastBus() 
    .ImpersonateSender(false) 
    .CreateBus(); 

    return bus.Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install()); 
} 

相同的代碼工作正常,在不同的(MVC4)項目,但在我的WCF服務WAS我似乎UnicastBustransport成員始終爲空,因此第824行倒塌。

未將對象引用設置爲對象的實例。在NServiceBus.Unicast.UnicastBus.NServiceBus.IStartableBus.Start(動作 startupAction)在 C:\ TeamCity的\ buildAgent \工作\ nsb.master_2的\ src \單播\ NServiceBus.Unicast \ UnicastBus.cs:行824 訪問.Cloud.WebService.Modules.NServiceBusModule.CreateBus()in l:\ Projects \ aCloud \ InsightIntegration \ Access.Cloud.WebService \ Modules \ NServiceBusModule.cs:line 47 at Access.Cloud.WebService.Modules.NServiceBusModule。 b__0(IContext 上下文)中 升:\項目\ aCloud \ InsightIntegration \ Access.Cloud.WebService \模塊\ NServiceBusModule.cs:線 25在Ninject.Activation.Provider'1.Create(IContext上下文)中 C: \項目\ Ninject \ ninject的\ src \ Ninject \激活\箴言ider.cs:line 38 at Ninject.Activation.Context.Resolve()in c:\ Projects \ Ninject \ ninject \ src \ Ninject \ Activation \ Context.cs:第157行 位於System.Linq.Enumerable.WhereSelectEnumerableIterator2。 MoveNext的()
在System.Linq.Enumerable.SingleOrDefault [TSource]在 System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext()(IEnumerable`1 源)

我已經在調試器檢查它太過肯定transport爲空。

我猜這是環境的東西,但我認爲運輸只是來自於一些綁定,當MsmqTransport()被調用時會被設置。我嘗試將加載模塊的代碼從Ninject Web引導程序移到Global.asax,但它沒有什麼區別。

任何幫助或指導讚賞!

+0

我想我補充一點,這似乎是無關到所使用的構建器類型,當使用'DefaultBuilder()'時,它完全一樣。 – mackie

+0

我不知道WAS是否會導致程序集掃描問題。你能否嘗試將相關程序集清單傳遞給Configure.With()? –

+0

@AndreasÖhlund自從我更新到3.3.4並將有問題的端點更改爲SendOnly後,此問題似乎消失了。如果將來我有類似的問題,我會嘗試明確的方法。感謝您的幫助:)現在解決方案已啓動並正在運行集成測試,並且像魅力一樣工作:D – mackie

回答

3

問題是您正在使用該方法創建您對公交車的引用。您正在使用的方法應該在進程啓動時調用一次,就是這樣。

的解決將是存儲在這個類的一個現場總線變量,然後用你的貨櫃註冊像這樣的領域:

Bind<IBus>().ToMethod(context => 
{ 
    return bus; 
}).InSingletonScope(); 
+0

感謝您對Udi的快速響應。我怎麼做並不重要,它獨立於容器似乎是獨立發生的。我改變了我的代碼到上面(我仍然保持一個靜態引用它),它仍然發生。最令人費解的! – mackie

+0

所有的樣品都適合你嗎? –

+0

樣品在相同的解決方案中工作並且公交車在其他Web項目中初始化正常。 – mackie

相關問題