升级至.NET 8:如何结合内置BackgroundService使用Hangfire服务?
.NET 8 下 Hangfire 的推荐部署方案
1. 替代传统 Windows Service:用 .NET Worker Service 承载 Hangfire 核心
.NET 8 的 Worker Service(基于 BackgroundService)是官方推荐的后台服务载体,完全可以替代原有的 TopShelf + Windows Service 组合,步骤如下:
- 创建一个 .NET 8 Worker Service 项目
- 引入必要的 Hangfire NuGet 包:
Hangfire.Core、Hangfire.SqlServer(或你使用的其他存储组件)、Hangfire.AspNetCore - 在
Program.cs中完成 Hangfire 配置:var builder = Host.CreateDefaultBuilder(args); builder.ConfigureServices(services => { // 配置 Hangfire 存储(和原方案使用同一数据库连接字符串) services.AddHangfire(config => config.UseSqlServerStorage("你的数据库连接字符串")); // 启动 Hangfire 服务器 services.AddHangfireServer(); }); var host = builder.Build(); host.Run(); - 部署时,直接通过
sc create命令将 Worker Service 注册为 Windows 服务即可,无需依赖 TopShelf——.NET 5+ 已原生集成 Windows 服务运行能力。
2. Dashboard UI 部署:集成到独立 ASP.NET Core MVC 项目
延续原独立部署的思路,在 .NET 8 的 ASP.NET Core MVC 项目中集成 Hangfire Dashboard:
- 引入
Hangfire.AspNetCoreNuGet 包 - 在
Program.cs中配置 Dashboard:var builder = WebApplication.CreateBuilder(args); // 配置 Hangfire 存储(需和 Worker Service 共享同一连接字符串) builder.Services.AddHangfire(config => config.UseSqlServerStorage("你的数据库连接字符串")); // 添加 MVC 服务 builder.Services.AddControllersWithViews(); var app = builder.Build(); // 环境配置(省略常规 MVC 中间件配置) if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); // 挂载 Hangfire Dashboard,自定义路由和权限验证 app.UseHangfireDashboard("/hangfire", new DashboardOptions { Authorization = new[] { new CustomDashboardAuthFilter() } }); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run(); - 将该 MVC 项目部署到 IIS,或注册为 Windows 服务运行,保持 Dashboard 与 Hangfire 核心服务分离,避免互相影响。
3. 是否还需要传统 Windows Service?
不需要再使用 .NET Framework 时代的传统 Windows Service,但 .NET 8 的 Worker Service 和 ASP.NET Core 项目都可以注册为 Windows 服务运行:
- Hangfire 核心服务(Worker Service):注册为 Windows 服务后可随系统自动启动,稳定性与原方案一致
- Dashboard 所在的 MVC 项目:可部署到 IIS,也可注册为 Windows 服务后台运行,两种方式均支持
此外,若未来需要跨平台部署,.NET 8 的 Worker Service 还可直接部署为 Linux 的 systemd 服务,灵活性远高于传统 Windows Service。
内容的提问来源于stack exchange,提问作者Mr W
相关产品推荐
相关产品推荐

