Processing Jobs in a Web Application

Ability to process background jobs directly in web applications is a primary goal of Hangfire. No external application like Windows Service or console application is required for running background jobs, however you will be able to change your decision later if you really need it. So, you can postpone architecture decisions that complicate things.

Since Hangfire does not have any specific dependencies and does not depend on System.Web, it can be used together with any web framework for .NET:

  • ASP.NET WebForms

  • ASP.NET MVC

  • ASP.NET WebApi

  • ASP.NET vNext (through the app.UseOwin method)

  • Other OWIN-based web frameworks (Nancy, Simple.Web)

  • Other non-OWIN based web frameworks (ServiceStack)

Using BackgroundJobServer class

The basic way (but not the simplest – see the next section) to start using Hangfire in a web framework is to use host-agnostic BackgroundJobServer class that was described in the previous chapter and call its Start and Dispose method in corresponding places.

Dispose the server instance when possible

In some web application frameworks it may be unclear when to call the Dispose method. If it is really impossible, you can omit this call as described here (but you’ll lose the graceful shutdown feature).

For example, in ASP.NET applications the best place for start/dispose method invocations is the global.asax.cs file:

using System;
using System.Web;
using Hangfire;

namespace WebApplication1
{
    public class Global : HttpApplication
    {
        private BackgroundJobServer _backgroundJobServer;

        protected void Application_Start(object sender, EventArgs e)
        {
            GlobalConfiguration.Configuration
                .UseSqlServerStorage("DbConnection");

            _backgroundJobServer = new BackgroundJobServer();
        }

        protected void Application_End(object sender, EventArgs e)
        {
            _backgroundJobServer.Dispose();
        }
    }
}

Using OWIN extension methods

Hangfire also provides a dashboard that is implemented on top of OWIN pipeline to process requests. If you have simple set-up and want to keep Hangfire initialization logic in one place, consider using Hangfire’s extension methods for OWIN’s IAppBuilder interface:

Install Microsoft.Owin.Host.SystemWeb for ASP.NET + IIS

If you are using OWIN extension methods for ASP.NET application hosted in IIS, ensure you have Microsoft.Owin.Host.SystemWeb package installed. Otherwise some features like graceful shutdown feature will not work for you.

If you installed Hangfire through the Hangfire package, this dependency is already installed.

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseHangfireServer();
    }
}

This line creates a new instance of the BackgroundJobServer class automatically, calls the Start method and registers method Dispose invocation on application shutdown. The latter is implemented using a CancellationToken instance stored in the host.OnAppDisposing environment key.