首页 文章

尝试在WCF服务中启动NServiceBus实例时为空传输

提问于
浏览
0

我正在使用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服务中,我似乎 UnicastBustransport 成员始终为空,因此第824行 transport.MaxThroughputPerSecond = license.MaxThroughputPerSecond; 落空 .

对象引用未设置为对象的实例 . 位于c:\ TeamCity \ buildAgent \ work \ nsb.master_2 \ src \ unicast \ NServiceBus.Unicast \ UnicastBus.cs中的NServiceBus.Unicast.UnicastBus.NServiceBus.IStartableBus.Start(Action startupAction):位于Access.Cloud.WebService的第824行l:\ Projects \ aCloud \ InsightIntegration \ Access.Cloud.WebService \ Modules \ NServiceBusModule.cs中的.Modules.NServiceBusModule.CreateBus():位于l的Access.Cloud.WebService.Modules.NServiceBusModule.b__0(IContext context)中的第47行:\ Projects \ aCloud \ InsightIntegration \ Access.Cloud.WebService \ Modules \ NServiceBusModule.cs:第25行,位于C:\ Projects \ Ninject \ ninject \ src \ Ninject \中的Ninject.Activation.Provider'1.Create(IContext context) Activation \ Provider.cs:Ninject.Activation.Context.Resolve()中的第38行,位于c:\ Projects \ Ninject \ ninject \ src \ Ninject \ Activation \ Context.cs:第157行,位于System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext ()System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext()的System.Linq.Enumerable.SingleOrDefault [TSource](IEnumerable`1 source)

我也在调试器中检查了它,确定 transport 为空 .

我有点环保,但我认为传输只是来自于调用 MsmqTransport() 时设置的一些绑定 . 我尝试将从Ninject Web引导程序加载模块的代码移动到Global.asax,但它没有什么区别 .

任何帮助或指导赞赏!

1 回答

  • 3

    问题是您正在使用该方法来创建对总线的引用 . 您正在使用的方法应该在进程启动时调用一次,就是这样 .

    修复方法是将总线变量存储在该类的字段中,然后在容器注册中使用该字段,如下所示:

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

相关问题