不在NServiceBus中自动创建队列
我正在运行NServiceBus 3.0.0 rc2但是当我启动应用程序(作为本地管理员)而没有预先创建MSMQ时,它出错了:
队列不存在或您没有足够的权限来执行操作。
使用NServiceBus 2.6没有发生这种情况。
以下是我的配置:
var bus = Configure.With() .Log4Net() .NinjectBuilder() .XmlSerializer() .DefiningCommandsAs(t => typeof(ICommand).IsAssignableFrom(t)) .DefiningEventsAs(t => typeof(IEvent).IsAssignableFrom(t)) .DefiningMessagesAs(t => typeof(IMessage).IsAssignableFrom(t)) .MsmqTransport() .DefineEndpointName("subscriber.input") .IsTransactional(true) .PurgeOnStartup(false) .UnicastBus() .LoadMessageHandlers() .ImpersonateSender(false) .CreateBus() .Start();
和
我可以看到一个配置扩展方法来禁用自动创建队列但没有启用它。
如果我预先创建队列,它工作正常。
自托管时,安装程序不会自动运行。 有关如何手动执行此操作的示例,请参阅asyncpages示例中的global.asax.cs 。
using NServiceBus using NServiceBus.Installation.Environments ... Bus = Configure.With() .Log4Net() .DefaultBuilder() .XmlSerializer() .MsmqTransport() .IsTransactional(false) .PurgeOnStartup(false) .UnicastBus() .ImpersonateSender(false) .CreateBus() .Start(() => Configure.Instance.ForInstallationOn().Install());
我通过手动在客户端创建队列(这是自托管)来解决这个问题。
不确定,但我认为2.x会自动完成。 主机正在按预期自动创建队列,但不是客户端(自托管)。
更新:像Andreas,Senor guardo camino所说,你需要像这样手动调用安装;
.Start(() => Configure.Instance.ForInstallationOn().Install());
这将按预期创建队列。