You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级至.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.AspNetCore NuGet 包
  • 在 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 09:45:57