1

我正在开发的应用程序使用 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 队列,该队列已经与另一个应用程序正常工作。我还确认此应用程序的配置与其他应用程序相同。

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

4

2 回答 2

1

解决!

供参考:在 IOC 配置中实例化了 Bus 对象,但随后 IOC 试图重复该过程。这导致 IBus 对象的多个实例被实例化,这使 IOC 感到困惑,因为根据 StructureMap,一个 IOC 对象应该只被实例化一次。在运行配置函数之前,我通过检查 IBus 对象是否已由我的 IOC 控制器实例化来围绕我的代码解决了这个问题。

于 2014-06-10T13:23:41.133 回答
0

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

Configure.With()
   .AutofacBuilder(container)
   .UseTransport<Msmq>()
   .MsmqSubscriptionStorage();
于 2014-10-20T13:54:32.367 回答