NServiceBus:无法设置key的值:NServiceBus.Transport.ConnectionString

时间:2014-06-09 15:26:33

标签: nservicebus structuremap objectfactory

我正在开发的应用程序使用NServiceBus作为消息总线进行某些操作。在我的AppStartup中,我正在尝试配置NServiceBus以使用自定义的单播配置,该配置已成功运行。但是,当我用这段代码调用我的配置时:

    ObjectFactory.Configure(configure =>
        configure.For<IBus>().Use(
            Configure
                .With()
                .StructureMapBuilder(ObjectFactory.Container)
                .UseTransport<Msmq>()
                .UnicastBus()
                .SendOnly()
            )
        );

我得到了这个例外:

  

无法设置密钥的值:   NServiceBus.Transport.ConnectionString。设置已被锁定   修改。请移动前面的任何配置代码   配置管道

这是异常的堆栈跟踪(省略机密部分):

   at NServiceBus.Settings.SettingsHolder.EnsureWriteEnabled(String key) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Settings\SettingsHolder.cs:line 174
   at NServiceBus.Settings.SettingsHolder.Set(String key, Object value) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Settings\SettingsHolder.cs:line 57
   at NServiceBus.Transports.ConfigureTransport`1.Configure(Configure config) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Transports\ConfigureTransport.cs:line 21
   at NServiceBus.TransportReceiverConfig.UseTransport(Configure config, Type transportDefinitionType, String connectionStringName) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Unicast\Transport\Config\TransportReceiverConfig.cs:line 55
   at NServiceBus.TransportReceiverConfig.UseTransport[T](Configure config, String connectionStringName) in c:\BuildAgent\work\31f8c64a6e8a2d7c\src\NServiceBus.Core\Unicast\Transport\Config\TransportReceiverConfig.cs:line 22
   at ...
   at StructureMap.Container.Configure(Action`1 configure) in c:\BuildAgent\work\767273992e840853\src\StructureMap\Container.cs:line 325
   at StructureMap.ObjectFactory.Configure(Action`1 configure) in c:\BuildAgent\work\767273992e840853\src\StructureMap\ObjectFactory.cs:line 386

要明确:这是在客户端,而不是在NServiceBus的实际总线端。此设置正在进行,以便能够将消息发送到NServiceBus队列,该队列已经与另一个应用程序正常工作。我还确认此应用程序的配置与其他应用程序相同。

我能得到的任何帮助都会很棒:)

2 个答案:

答案 0 :(得分:0)

解决!

供参考:在IOC配置中实例化了Bus对象,但是IOC正在尝试重复该过程。这导致实例化IBus对象的多个实例,这使IOC混淆,因为IOC对象应该仅根据StructureMap实例化一次。我通过检查代码来解决这个问题,看看在运行配置函数之前,我的IOC控制器是否已经实例化了IBus对象。

答案 1 :(得分:0)

我遇到了同样的问题。这对我有帮助。

Configure.With()
   .AutofacBuilder(container)
   .UseTransport<Msmq>()
   .MsmqSubscriptionStorage();