我正在开发的应用程序使用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队列,该队列已经与另一个应用程序正常工作。我还确认此应用程序的配置与其他应用程序相同。
我能得到的任何帮助都会很棒:)
答案 0 :(得分:0)
解决!
供参考:在IOC配置中实例化了Bus对象,但是IOC正在尝试重复该过程。这导致实例化IBus对象的多个实例,这使IOC混淆,因为IOC对象应该仅根据StructureMap实例化一次。我通过检查代码来解决这个问题,看看在运行配置函数之前,我的IOC控制器是否已经实例化了IBus对象。
答案 1 :(得分:0)
我遇到了同样的问题。这对我有帮助。
Configure.With()
.AutofacBuilder(container)
.UseTransport<Msmq>()
.MsmqSubscriptionStorage();