我正在开发的应用程序在某些操作中使用NServiceBus作为消息总线。在我的AppStartup中,我试图将NServiceBus配置为使用自定义Unicast配置,该配置正在成功运行。但是,当我用以下代码调用我的配置时:
ObjectFactory.Configure(configure =>
configure.For<IBus>().Use(
Configure
.With()
.StructureMapBuilder(ObjectFactory.Container)
.UseTransport<Msmq>()
.UnicastBus()
.SendOnly()
)
);我明白这一例外:
无法为key: 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队列发送消息,该队列已经与另一个应用程序一起正常工作。我还确认此应用程序配置与其他应用程序相同。
我能得到的任何帮助都是很棒的:)
发布于 2014-06-10 13:23:41
解决了!
参考:总线对象在IOC配置中被实例化,但接着IOC试图重复这个过程。这导致实例化IBus对象的多个实例,这使IOC感到困惑,因为根据StructureMap,IOC对象只应该实例化一次。在运行配置函数之前,我对代码进行了检查,查看IBus对象是否已被IOC控制器实例化,从而解决了这个问题。
发布于 2014-10-20 13:54:32
我也有同样的问题。这对我有帮助。
Configure.With()
.AutofacBuilder(container)
.UseTransport<Msmq>()
.MsmqSubscriptionStorage();https://stackoverflow.com/questions/24123496
复制相似问题