我正在使用 NServiceBus 3.3.3。我使用 Ninject 作为我的容器,并通过绑定到以下方法来初始化模块中的总线:
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 服务中,我似乎总是为 null的transport
成员,因此第 824 行失败。UnicastBus
transport.MaxThroughputPerSecond = license.MaxThroughputPerSecond;
你调用的对象是空的。在 NServiceBus.Unicast.UnicastBus.NServiceBus.IStartableBus.Start(Action startupAction) in c:\TeamCity\buildAgent\work\nsb.master_2\src\unicast\NServiceBus.Unicast\UnicastBus.cs:Access.Cloud.WebService 的第 824 行.Modules.NServiceBusModule.CreateBus() in l:\Projects\aCloud\InsightIntegration\Access.Cloud.WebService\Modules\NServiceBusModule.cs: 第 47 行 Access.Cloud.WebService.Modules.NServiceBusModule.b__0(IContext context) in l :\Projects\aCloud\InsightIntegration\Access.Cloud.WebService\Modules\NServiceBusModule.cs:line 25 at Ninject.Activation.Provider'1.Create(IContext context) in c:\Projects\Ninject\ninject\src\Ninject\ Activation\Provider.cs:C 中 Ninject.Activation.Context.Resolve() 的第 38 行:
在 System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 源) 在 System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext()
我也在调试器中检查过它,果然transport
是空的。
我猜这是环境问题,但我认为传输只是来自一些在MsmqTransport()
调用时设置的绑定。我尝试将加载模块的代码从 Ninject 网络引导程序移动到 Global.asax,但它没有任何区别。
任何帮助或指导表示赞赏!