NServiceBus: невозможно установить значение для ключа: NServiceBus.Transport.ConnectionString

Мое приложение, над которым я работаю, использует NServiceBus для шины обмена сообщениями для некоторых операций. В моем AppStartup я пытаюсь настроить NServiceBus для использования настраиваемой конфигурации Unicast, которая успешно работает. Однако, когда я вызываю мой Configure с этим кодом:

    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 ответа

Решение

ПОСТАНОВИЛИ!

Для справки: объект Bus создавался в конфигурации IOC, но затем IOC пытался повторить процесс. Это привело к тому, что несколько экземпляров объекта IBus были созданы, что привело к путанице в IOC, поскольку объект IOC должен создаваться только один раз в соответствии со StructureMap. Я решил эту проблему, окружив свой код проверкой, чтобы увидеть, был ли объект IBus создан моим контроллером IOC или нет перед запуском функций конфигурации.

У меня такая же проблема. Это помогло мне.

Configure.With()
   .AutofacBuilder(container)
   .UseTransport<Msmq>()
   .MsmqSubscriptionStorage();
Другие вопросы по тегам