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();