【发布时间】:2012-12-18 10:59:07
【问题描述】:
我正在使用 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 服务中,我似乎 UnicastBus 的成员 transport 始终为空,因此第 824 行 transport.MaxThroughputPerSecond = license.MaxThroughputPerSecond; 失败。
对象引用未设置为对象的实例。在 NServiceBus.Unicast.UnicastBus.NServiceBus.IStartableBus.Start(动作 启动动作)在 c:\TeamCity\buildAgent\work\nsb.master_2\src\unicast\NServiceBus.Unicast\UnicastBus.cs:line 824 在 Access.Cloud.WebService.Modules.NServiceBusModule.CreateBus() 中 l:\Projects\aCloud\InsightIntegration\Access.Cloud.WebService\Modules\NServiceBusModule.cs:line 47 在 Access.Cloud.WebService.Modules.NServiceBusModule.b__0(IContext 上下文)在 l:\Projects\aCloud\InsightIntegration\Access.Cloud.WebService\Modules\NServiceBusModule.cs:line 25 在 Ninject.Activation.Provider'1.Create(IContext context) 中 c:\Projects\Ninject\ninject\src\Ninject\Activation\Provider.cs:第 38 行 在 Ninject.Activation.Context.Resolve() 中 c:\Projects\Ninject\ninject\src\Ninject\Activation\Context.cs:157 行 在 System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext()
在 System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 来源)在 System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext()
我也在调试器中检查过,果然transport 为空。
我猜这是环境问题,但我认为传输只是来自一些在调用 MsmqTransport() 时设置的绑定。我尝试将加载模块的代码从 Ninject 网络引导程序移动到 Global.asax,但它没有任何区别。
感谢任何帮助或指导!
【问题讨论】:
-
我想我要补充一点,它似乎与使用的构建器类型无关,并且在使用
DefaultBuilder()时它的作用完全相同。 -
我想知道 WAS 是否导致程序集扫描出现问题。您可以尝试将相关程序集的列表显式传递给 Configure.With() 吗?
-
@AndreasÖhlund 这个问题似乎已经消失了,因为我更新到 3.3.4 并将有问题的端点更改为 SendOnly。如果我以后有类似的问题,我会尝试显式方法。感谢您的帮助 :) 该解决方案现已在集成测试中启动并运行,并且工作起来就像一个魅力:D
标签: wcf ninject nservicebus nservicebus3