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

如何为ASP.NET Core Minimal API Windows服务实现暂停/继续功能?

在ASP.NET Core Windows服务中实现暂停/继续自定义逻辑

完全可行,你可以通过实现IHostedService并监听Windows服务特有的生命周期事件来实现自定义暂停/继续逻辑,具体步骤如下:

1. 创建自定义服务处理类

实现IHostedService接口,注入WindowsServiceLifetime来订阅暂停和继续事件:

using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Hosting.WindowsServices;
using Microsoft.Extensions.Logging;

public class WindowsServiceEventHandler : IHostedService
{
    private readonly ILogger<WindowsServiceEventHandler> _logger;
    private readonly WindowsServiceLifetime? _windowsLifetime;

    public WindowsServiceEventHandler(ILogger<WindowsServiceEventHandler> logger, IHostLifetime lifetime)
    {
        _logger = logger;
        _windowsLifetime = lifetime as WindowsServiceLifetime;
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
        if (_windowsLifetime != null)
        {
            _windowsLifetime.Pausing += OnServicePausing;
            _windowsLifetime.Continuing += OnServiceContinuing;
        }
        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        if (_windowsLifetime != null)
        {
            _windowsLifetime.Pausing -= OnServicePausing;
            _windowsLifetime.Continuing -= OnServiceContinuing;
        }
        return Task.CompletedTask;
    }

    private void OnServicePausing(object? sender, EventArgs e)
    {
        // 写入你的暂停自定义逻辑
        _logger.LogInformation("Windows服务正在执行暂停操作");
        // 示例:停止后台任务、释放临时资源、关闭非必要连接等
    }

    private void OnServiceContinuing(object? sender, EventArgs e)
    {
        // 写入你的继续自定义逻辑
        _logger.LogInformation("Windows服务正在执行恢复操作");
        // 示例:重启后台任务、重新初始化资源、恢复连接等
    }
}

2. 注册自定义服务

在Program.cs中将自定义服务添加到依赖注入容器:

var builder = WebApplication.CreateBuilder();
builder.Host.UseWindowsService();

// 注册自定义的Windows服务事件处理服务
builder.Services.AddHostedService<WindowsServiceEventHandler>();

var app = builder.Build();
app.MapGet("/hello", () => "Hello World");

app.Run();

3. 确保依赖包存在

如果项目未自动引用Microsoft.Extensions.Hosting.WindowsServices包,需通过NuGet安装:

Install-Package Microsoft.Extensions.Hosting.WindowsServices

注意事项

  • 当Windows服务被暂停时,默认不会自动停止API的请求处理,若需要暂停期间拒绝请求,可在OnServicePausing中添加逻辑(比如关闭HTTP端点、添加中间件拦截请求)。
  • 事件处理逻辑应尽量轻量化,避免长时间阻塞,影响服务的暂停/继续响应速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:30:32