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

如何将ASP.NET Core 7 Web API配置为Windows服务?启动报错求助

ASP.NET Core 7 Web API 作为Windows服务托管的正确实现

你的代码出现服务启动超时错误,核心原因是手动嵌套了ServiceBase.Run与IHost启动逻辑,导致Windows服务控制管理器无法在规定时间内收到启动完成信号。以下是官方标准的实现方案:

1. 安装必要依赖

确保项目已安装Microsoft.Extensions.Hosting.WindowsServices NuGet包,这是官方提供的Windows服务托管支持库。

2. 简化Program.cs代码

无需自定义ServiceBase子类,官方扩展已封装完整的服务生命周期逻辑:

var builder = WebApplication.CreateBuilder(args);

// 配置Windows服务托管,自动适配服务生命周期
builder.Host.UseWindowsService(options =>
{
    options.ServiceName = "My Web API Service"; // 设置服务在系统中显示的名称
});

// 添加控制器服务
builder.Services.AddControllers();

// 开发环境启用Swagger
if (builder.Environment.IsDevelopment())
{
    builder.Services.AddEndpointsApiExplorer();
    builder.Services.AddSwaggerGen();
}

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

// 统一启动逻辑,自动适配Windows服务/控制台模式
app.Run();

关键说明

  • builder.Host.UseWindowsService()是核心配置,它会自动处理Windows服务的启动、停止、暂停等生命周期事件,无需手动实现ServiceBase。
  • 无需手动判断操作系统,该扩展仅在Windows环境下生效,其他系统会自动回退为普通控制台运行模式。
  • 此方案确保Web主机生命周期与Windows服务生命周期绑定,避免启动超时问题。

部署步骤

  1. 发布应用:执行命令发布为可执行文件
dotnet publish -c Release -r win-x64 --self-contained true
  1. 安装服务:打开管理员命令提示符,执行
sc create "My Web API Service" binPath="C:\路径\到\发布后的\应用.exe"
  1. 启动服务:通过命令或服务管理器启动
sc start "My Web API Service"

内容的提问来源于stack exchange,提问作者Ronnie Souza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:06:20