Joel
Joel

Reputation: 2257

NServiceBus Version 5 Asp.NET MVC

We have an ASP.NET MVC 4 website using NServiceBus to send messages to various services. Because our dev environments don't have these services installed, we stub the ServiceBus instance for local development. We use an Autofac Module registered in our Application_Start to set this all up and configure our Bus instance for injection into controllers.

My NSB 3.3 configuration:

public class ServiceModule : Module
  {
    protected override void Load(ContainerBuilder builder)
    {
      builder.Register<IBus>((c, p) =>
      {
        var useServiceBus = bool.Parse(ConfigurationManager.AppSettings["UseServiceBus"]);

        if (useServiceBus)
        {
          return NServiceBus.Configure.With()
            .Log4Net()
            .DefaultBuilder()
            .XmlSerializer()
            .MsmqTransport().IsTransactional(false).PurgeOnStartup(false)
            .MsmqSubscriptionStorage()
            .UnicastBus().ImpersonateSender(false)
            .CreateBus()
            .Start(() => NServiceBus.Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());
        }
        else
          return c.Resolve<TestServiceBus>();
      }).SingleInstance();
    }
  }

My attempted NSB 5.0.3 configuration:

public class ServiceModule : Module
  {
    protected override void Load(ContainerBuilder builder)
    {
      builder.Register<IBus>((c, p) =>
      {
        var useServiceBus = bool.Parse(ConfigurationManager.AppSettings["UseServiceBus"]);

        if (useServiceBus)
        {
          var configuration = new BusConfiguration();
          configuration.UsePersistence<RavenDBPersistence>();
          configuration.RegisterComponents(r =>
          {
            r.ConfigureComponent<EnvironmentMessageMutator>(() => new EnvironmentMessageMutator(new DetectsEnvironment().GetEnvironment()), DependencyLifecycle.InstancePerCall);
          });
          return Bus.Create(configuration);
        }
        else
          return c.Resolve<TestServiceBus>();
      }).SingleInstance();
    }
  }

Bus.Create is failing with an ObjectDisposedException, "Cannot access a disposed object" on CommonObjectBuilder. I can't find any documentation on the correct way to set this up in NSB 5, or how to configure the regular NServiceBus injection to allow us to do the stubbing described above.

(This should be tagged NServiceBus 5, but I don't have the reputation)

Upvotes: 1

Views: 1137

Answers (1)

Joel
Joel

Reputation: 2257

Okay, it turns out this is NSB 5's way of telling you you have the ServiceControl monitoring plugins installed in your endpoint, but don't have the appropriate queues on the machine.

Solution is to install ServiceControl.

Upvotes: 1

Related Questions