Getting Started
Architecture
NServiceBus
Transports
Persistence
Hosting
ServiceInsight
ServicePulse
ServiceControl
Monitoring
Modernization
Samples

NServiceBus in ASP.NET

Target Version: NServiceBus 8.x
Standard support for version 8.x of NServiceBus has expired. For more information see our Support Policy.

NServiceBus easily integrates with ASP.NET Core applications.

Minimal APIs

ASP.NET 6 introduced a new hosting API with the ASP.NET minimal APIs. The NServiceBus.Extensions.Hosting package is fully compatible with the minimal API's WebApplication host:

var builder = WebApplication.CreateBuilder();

builder.Host.UseNServiceBus(context =>
{
    var endpointConfiguration = new EndpointConfiguration("MyWebAppEndpoint");

    // configure the endpoint

    return endpointConfiguration;
});

var host = builder.Build();

// further ASP.NET configuration

host.Run();

Generic Host

Starting with ASP.NET 3, the NServiceBus Generic Host support provides integration with ASP.NET Core applications:

var builder = Host.CreateDefaultBuilder()
    .UseNServiceBus(context =>
    {
        var endpointConfiguration = new EndpointConfiguration("MyWebAppEndpoint");

        // configure the endpoint

        return endpointConfiguration;
    })
    .ConfigureWebHostDefaults(webHost => webHost.UseStartup<Startup>())
    .Build();

builder.Run();

Reading application settings

NServiceBus is configured in code. Values such as endpoint names, connection strings, and feature flags can be sourced from appsettings.json or any other configuration provider by reading them via IConfiguration and passing them to the NServiceBus configuration API.

When using the Minimal API host, read configuration via builder.Configuration:

var builder = WebApplication.CreateBuilder();

var endpointName = builder.Configuration.GetValue<string>("NServiceBus:EndpointName")
    ?? "MyWebAppEndpoint";

builder.Host.UseNServiceBus(context =>
{
    var endpointConfiguration = new EndpointConfiguration(endpointName);
    // configure endpoint, passing values from context.Configuration as needed
    return endpointConfiguration;
});

var host = builder.Build();

// further ASP.NET configuration

host.Run();

When using the Generic Host, read configuration via the HostBuilderContext (or hostBuilder.Configuration):

var host = Host.CreateDefaultBuilder()
    .UseNServiceBus(ctx =>
    {
        var endpointName = ctx.Configuration.GetValue<string>("NServiceBus:EndpointName")
            ?? "MyEndpoint";

        var endpointConfiguration = new EndpointConfiguration(endpointName);
        // configure endpoint, passing values from ctx.Configuration as needed
        return endpointConfiguration;
    })
    .Build();

await host.RunAsync();

Both WebApplication.CreateBuilder() and Host.CreateApplicationBuilder() automatically load configuration from:

  • appsettings.json
  • appsettings.{Environment}.json (for example, appsettings.Development.json)
  • Environment variables

No additional setup is required to enable these sources. See Reading application settings for guidance on connection strings, the options pattern, and other configuration providers.

Dependency injection

Messages can be sent with NServiceBus using the IMessageSession API, which is available via the dependency injection container.

Web API controllers

[ApiController]
class WebApiController : ControllerBase
{
    IMessageSession messageSession;

    public WebApiController(IMessageSession messageSession)
    {
        this.messageSession = messageSession;
    }

    [HttpGet]
    public async Task<ActionResult> Get()
    {
        await messageSession.Send(new MessageFromWebApi());
        return Ok("message was sent successfully");
    }
}

MVC controllers

public class MvcController : Controller
{
    IMessageSession messageSession;

    public MvcController(IMessageSession messageSession)
    {
        this.messageSession = messageSession;
    }

    public ViewResult Index()
    {
        return View();
    }

    public async Task<ViewResult> SendMessage()
    {
        await messageSession.Send(new MessageFromMvc());
        return View();
    }
}

Razor Pages

public class RazorPage : PageModel
{
    IMessageSession messageSession;

    public RazorPage(IMessageSession messageSession)
    {
        this.messageSession = messageSession;
    }

    public async Task<IActionResult> OnPostAsync()
    {
        if (!ModelState.IsValid)
        {
            return Page();
        }

        await messageSession.Send(new MessageFromRazorPage());
        return RedirectToPage("./Success");
    }
}

Older ASP.NET Core versions

For web applications using ASP.NET Core 2.x, the Community.NServiceBus.WebHost community package provides integration with the legacy WebHost.

Samples

Related Articles