Using NServiceBus in an ASP.NET Core WebAPI Application

Component: NServiceBus
NuGet Package NServiceBus (7.2-pre)
This page targets a pre-release version and is subject to change prior to the final release.

This sample shows how to send messages to an NServiceBus endpoint from an ASP.NET Core WebAPI application.

Running the solution

When the solution is run, a new browser window/tab opens, as well as a console application. The browser will navigate to http://localhost:51863/api/sendmessage.

An async WebAPI controller handles the request. It creates an NServiceBus message and sends it to the endpoint running in the console application. The message has been processed successfully when the console application prints "Message received at endpoint".

Prerequisites

  • Visual Studio 2017 is required to run this sample.

Initialize the WebAPI endpoint

Open Startup.cs and look at the ConfigureServices method.

A Send-Only endpoint named Samples.ASPNETCore.Sender is configured in the WebAPI application by creating a new EndpointConfiguration.

var endpointConfiguration = new EndpointConfiguration("Samples.ASPNETCore.Sender");
var transport = endpointConfiguration.UseTransport<LearningTransport>();
endpointConfiguration.SendOnly();

Routing is configured to send every message from the assembly containing MyMessage to the Samples.ASPNETCore.Endpoint endpoint.

var routing = transport.Routing();
routing.RouteToEndpoint(
    assembly: typeof(MyMessage).Assembly,
    destination: "Samples.ASPNETCore.Endpoint");

Finally, NServiceBus is configured using the AddNServiceBus method. This sets up NServiceBus as a hosted service and registers the IMessageSession in the dependency injection container so that controllers can take a dependency on it.

services.AddNServiceBus(endpointConfiguration);

Injection into the Controller

The message session is injected into SendMessageController via constructor injection.

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

Sending the message

Send messages through the IMessageSession instance provided by ASP.NET Core.

[HttpGet]
public async Task<string> Get()
{
    var message = new MyMessage();
    await messageSession.Send(message)
        .ConfigureAwait(false);
    return "Message sent to endpoint";
}

Processing the message

The message is picked up and processed by a message handler in the Samples.ASPNETCore.Endpoint endpoint.

public Task Handle(MyMessage message, IMessageHandlerContext context)
{
    log.Info("Message received at endpoint");
    return Task.CompletedTask;
}

Related Articles

  • Hosting
    Describes the various approaches to endpoint hosting.

Last modified