gpt4 book ai didi

c# - 优雅地停止 ASP.NET Core Web App(从 Visual Studio 调试器中),一个与 IHostedService 相关的问题

转载 作者:行者123 更新时间:2023-11-30 16:38:14 35 4
gpt4 key购买 nike

我是 ASP.NET Core 的新手,所以我可能错过了 50 英里的东西,因为我已经花了 3 个小时在这上面无济于事。

我在 VS 2017 中制作了一个 Web 应用程序,由 Kestrel 托管,在 IIS Express 下运行(当您制作新的 Web 应用程序时,这都是默认)。当我按下 F5 时,应用程序启动,我的 Chrome 浏览器打开,我看到“hello world”式的输出。当我关闭此浏览器窗口时,应用程序终止。

现在,我需要在后台执行一些任务,并且我需要这些任务具有清理逻辑 - 我发现 IHostedService 允许我执行此操作。

文档指出:

When you register an IHostedService, .NET Core will call the StartAsync() and StopAsync() methods of your IHostedService type during application start and stop respectively.

我做了:

public void ConfigureServices(IServiceCollection services)
{
services.AddHostedService<MyBackgroundService>();
}

并且服务按预期启动,一切正常。极其简单的东西。但它永远不会停止,至少不会优雅地停止。

当我关闭那个自动启动的浏览器窗口时,我的应用程序也随之关闭,但是我的 IHostedService 服务中的这个方法:

public Task StopAsync(CancellationToken cancellationToken)
{
...
}

从未被调用。

我试过 example provided in documentation它表现出同样的问题——当我在 VS 中尝试清理时,清理从未完成。

我注意到来自名为“ASP.NET Core Web 服务器”的输出 channel 的特殊信息:

BackgroundTasksSample> Application started. Press Ctrl+C to shut down.

这显然是来自控制台的一些重定向,因为这个应用程序首先看起来是一个控制台应用程序。所以我想知道 VS 是否通过看似对我隐藏控制台来阻止我正常关闭我的应用程序?

我还注意到一个小的 IIS Express 托盘图标,它列出了我运行过的所有应用程序,并且它有一个停止按钮,该按钮似乎没有执行任何操作。我假设 IIS Express 在这里只是充当某种代理。

我傻眼了,尤其是因为我似乎是唯一一个遇到这个问题的人。

如何正确终止我的网络应用程序?

最佳答案

我找到了解决方案。首先,我要引用我自己的话:

I also noticed a little IIS Express tray icon which lists any apps I've ran and it has a Stop button which doesn't seem to do anything. I assume IIS Express is here simply acting as some kind of a proxy.

实际上,有一种方法可以优雅地停止托管在 IIS Express 下的 Kestrel 应用程序(这是 VS 中的默认选项)。

显然,我的 IIS Express 出现了...“故障”,停止命令不起作用 - 没有错误消息,只是什么也没发生。关闭所有 VS 实例并在任务管理器中终止 dotnet.exe 进程后,我再次打开解决方案并最终能够停止该应用程序。

关于c# - 优雅地停止 ASP.NET Core Web App(从 Visual Studio 调试器中),一个与 IHostedService 相关的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55499755/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com