如何使用代码配置nservicebus msmqtransport

如何使用代码配置nservicebus msmqtransport,nservicebus,Nservicebus,我刚刚开始使用NServiceBus,无法找出在代码中配置MsmqTransport时缺少的内容。如果我像这样配置发布服务器 IBus bus = Configure.With() .CastleWindsorBuilder() .XmlSerializer() .MsmqSubscriptionStorage()

我刚刚开始使用NServiceBus,无法找出在代码中配置MsmqTransport时缺少的内容。如果我像这样配置发布服务器

IBus bus = Configure.With()
                        .CastleWindsorBuilder()
                        .XmlSerializer()
                        .MsmqSubscriptionStorage()
                        .MsmqTransport()
                            .IsTransactional(true)
                            .PurgeOnStartup(false)
                        .UnicastBus()
                            .ImpersonateSender(false)
                        .CreateBus()
                        .Start();
bus.Publish(new Message(DateTime.Now));
而app.config也是如此


然后一切正常-它将创建队列,我可以愉快地发送消息,但是如果我删除队列,然后用这样的代码重试

var config = Configure.With()
              .CastleWindsorBuilder()
              .XmlSerializer()
              .UnicastBus()
                  .ImpersonateSender(false)
              .MsmqSubscriptionStorage();
config
    .Configurer
    .ConfigureComponent<MsmqTransport>(NServiceBus.ObjectBuilder.ComponentCallModelEnum.None)
        .ConfigureProperty(x => x.InputQueue, "testapps_messagebus")
        .ConfigureProperty(x => x.NumberOfWorkerThreads, 1)
        .ConfigureProperty(x => x.ErrorQueue, "testapps_errors")
        .ConfigureProperty(x => x.MaxRetries, 5);

IBus bus = config
         .CreateBus()
         .Start();

bus.Publish(new Message(DateTime.Now));
var config=Configure.With()
.CastleWindsorBuilder()
.XmlSerializer()
.UnicastBus()
.ImpersonateSender(错误)
.MsmqSubscriptionStorage();
配置
.配置器
.ConfigureComponent(NServiceBus.ObjectBuilder.ComponentCallModelEnum.None)
.ConfigureProperty(x=>x.InputQueue,“testapps\u messagebus”)
.ConfigureProperty(x=>x.NumberOfWorkerThreads,1)
.ConfigureProperty(x=>x.ErrorQueue,“testapps\u错误”)
.ConfigureProperty(x=>x.MaxRetries,5);
IBus总线=配置
.CreateBus()
.Start();
发布(新消息(DateTime.Now));

消息似乎丢失了,因为它们没有出现在任何队列中,也没有得到处理-我猜我遗漏了什么,但我看不到在哪里。

D'Oh!发布一个你已经纠结了一段时间的问题,然后休息一下。当然,答案击中了你,这是非常明显的!我忘了配置MsmqTransport,下面是我的工作代码供感兴趣的人使用


Configure config = Configure.With();
config
    .CastleWindsorBuilder()
    .XmlSerializer()
    .MsmqSubscriptionStorage()
    .MsmqTransport()
        .IsTransactional(true)
        .PurgeOnStartup(false)
    .UnicastBus()
        .ImpersonateSender(false);

config
    .MsmqSubscriptionStorage()
    .Configurer
        .ConfigureComponent(NServiceBus.ObjectBuilder.ComponentCallModelEnum.None)
            .ConfigureProperty(x => x.InputQueue, "testapps_messagebus")
            .ConfigureProperty(x => x.NumberOfWorkerThreads, 1)
            .ConfigureProperty(x => x.ErrorQueue, "testapps_errors")
            .ConfigureProperty(x => x.MaxRetries, 5);

IBus bus = config
              .CreateBus()
              .Start();

bus.Publish(new Message(DateTime.Now));


您能详细说明一下为什么要使用代码配置它吗?如果需要将配置设置存储在另一个地方,而不是App.CONFIG,则应该考虑实现自定义配置源:谢谢链接。正如您所猜测的,我需要将配置存储在一个不是app.config的部分中。当我寻找一个解决方案时,出现了与之非常相似的东西。

Configure config = Configure.With();
config
    .CastleWindsorBuilder()
    .XmlSerializer()
    .MsmqSubscriptionStorage()
    .MsmqTransport()
        .IsTransactional(true)
        .PurgeOnStartup(false)
    .UnicastBus()
        .ImpersonateSender(false);

config
    .MsmqSubscriptionStorage()
    .Configurer
        .ConfigureComponent(NServiceBus.ObjectBuilder.ComponentCallModelEnum.None)
            .ConfigureProperty(x => x.InputQueue, "testapps_messagebus")
            .ConfigureProperty(x => x.NumberOfWorkerThreads, 1)
            .ConfigureProperty(x => x.ErrorQueue, "testapps_errors")
            .ConfigureProperty(x => x.MaxRetries, 5);

IBus bus = config
              .CreateBus()
              .Start();

bus.Publish(new Message(DateTime.Now));