Self-Hosting in Azure WebJobs

Component: NServiceBus
NuGet Package: NServiceBus (7.x)

This sample is compatible with Azure WebJobs SDK 3.0.

Running in development mode

  1. Start the Azure Storage Emulator.
  2. Run the solution.

Code walk-through

This sample contains one project:

  • Receiver: A self-hosted endpoint running in a continuous WebJob.


The receiver uses the self-hosting capability to start an end endpoint inside a continuously running WebJob.

The UseNServiceBus method of NServiceBus.Extensions.Hosting is used to configure and start the endpoint:

hostBuilder.UseNServiceBus(ctx =>
    var endpointConfiguration = new EndpointConfiguration("receiver");

    var transportConnectionString = ctx.Configuration.GetConnectionString("TransportConnectionString");

    var transport = endpointConfiguration.UseTransport<AzureStorageQueueTransport>();

    return endpointConfiguration;
If dependencies need to be shared between the service collection and NServiceBus infrastructure, such as message handlers, see the ASP.NET Core sample.

A critical error action must be defined to restart the host when a critical error is raised:

static async Task OnCriticalError(ICriticalErrorContext context)
    var fatalMessage =
        $"The following critical error was encountered:{Environment.NewLine}{context.Error}{Environment.NewLine}Process is shutting down. StackTrace: {Environment.NewLine}{context.Exception.StackTrace}";
    EventLog.WriteEntry(".NET Runtime", fatalMessage, EventLogEntryType.Error);

        await context.Stop().ConfigureAwait(false);
        Environment.FailFast(fatalMessage, context.Exception);

When the WebJob host stops, the endpoint endpoint is automatically stopped with the host. This is taken care off by the hosting extension.


Last modified