You can place the background processing in an ASP.NET application without using additional processes like Windows Services. Hangfire's code is ready for unexpected process terminations, application pool recycles and restarts during the deployment process. Since persistent storages are used, you'll not lose any background job.
Before we start, we'll need a working ASP.NET application, you can use ASP.NET MVC or ASP.NET WebForms, the steps are almost the same. First of all, the following packages should be installed. There are a lot of ways to install NuGet packages, I'll show how to use Package Manager Console window as it doesn't require any screenshots.
PM> Install-Package Hangfire.Core PM> Install-Package Hangfire.SqlServer PM> Install-Package Hangfire.AspNet
Creating a database
As you can see from the snippet above, we'll be using SQL Server as a job storage in this article. Before configuring Hangfire, you'll need to create a database for it or use an existing one. Configuration strings below point to the
HangfireTest database living in the
SQLEXPRESS instance on a local machine.
You can use SQL Server Management Studio or any other way to execute the following SQL command. If you are using other database name or instance, ensure you've changed connection strings when configuring Hangfire during the next steps.
CREATE DATABASE [HangfireTest] GO
Depending on the age of your application, we'll make some modification either to the
Startup class, or the
Global.asax.cs file. But not both at the same time, however nothing terrible will happen in this case, your configuration logic will be executed only once, first invocation wins, but you may get multiple processing servers.
Configuration settings below for new installations only
Some of those settings can be incompatible with existing installations, please see the :doc:`Upgrade Guides <../upgrade-guides/index>` instead when upgrading to a newer version.
Using Startup class
If you have a modern (cough, cough) ASP.NET application, then you'd probably have the
Startup.cs file. This case is the simplest case to bootstrap Hangfire and start using background processing. There are some extension methods and their overloads available for the
All you need is to call them, to start using both Hangfire Dashboard and Hangfire Server.
Authorization configuration required for non-local requests
By default only local access is permitted to the Hangfire Dashboard. Dashboard authorization must be configured in order to allow remote access.
Using Global.asax.cs file
Configured using the Startup class? Skip this section.
If you can't use the
Startup class for a reason, just use the
HangfireAspNet class and modify the
Global.asax.cs file. You'll not have Hangfire Dashboard in this case, but at least you can start the background processing. If you'd like to install the dashboard also, please google how to add the
Startup class to your project, and go to the previous section.
You might also need to disable OWIN's Startup class detection, when using initialization based on
Global.asax.cs file. The problem is
Hangfire.AspNet package depends on
Microsoft.Owin.SystemWeb package, and it requires OWIN Startup class to be present in your web application. If the following exception appears, just disable the automatic startup in your
web.config file as should below.
EntryPointNotFoundException: The following errors occurred while attempting to load the app. - No assembly found containing an OwinStartupAttribute. - No assembly found containing a Startup or [AssemblyName].Startup class.
Run your application in the Debug mode by pressing F5 (this is required to see the output of the
Debug.WriteLine method). Then check the Output window for the following message to see whether background processing has started successfully.
When application is started, open the following URL (assuming your app is running on the 5000 port) to access to the Hangfire Dashboard interface. As we can see, our background job was completed successfully.
Startup class is required for Dashboard UI
Please note, Dashboard UI is available only if you were using the Startup class to configure Hangfire.
That's all, now you are ready to create other background jobs!