【发布时间】:2022-06-15 20:16:54
【问题描述】:
我有一个在 Kestrel 服务器(自托管)上运行的 ASP.Net API。它正在接收请求,一切都按我的意愿工作,但是当控制台关闭时,我的应用程序会尝试将重要数据保存到磁盘,下次启动时将需要这些数据。这需要一些时间,通常应用程序会等到任务完成,然后以代码 0 退出。但我必须首先杀死在自己的线程上运行的应用程序的 webapp 部分,这样就不会有新的请求进来。这是可行的,但如果保存时间超过 5 秒,应用程序将在没有警告的情况下终止。这会破坏正在保存的数据,这显然是一个大问题。没有抛出异常。
- .Net Web 应用程序停止后是否会终止应用程序?
- 如果是,我可以阻止我这样做吗?
- 还有什么可能导致 Web 应用程序终止整个应用程序?
我正在使用:
.Net 6.0Visual Studio 2022- 终止我使用的应用程序
Environment.Exit(0);(但它没有被调用,因为应用程序过早死亡) -
Program.Terminate()是一个函数,它应该可以处理良好的关机而不会丢失数据。 - 启动网络应用的代码:
public static Task Start()
{
WebApplicationBuilder builder = WebApplication.CreateBuilder();
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Host.UseConsoleLifetime();//idk what it does exactlyS
app = builder.Build();
app.Urls.Clear();
app.Urls.Add("http://0.0.0.0:0000");
app.Urls.Add("http://localhost:0000");
app.UseSwagger();
app.UseSwaggerUI();
app.Map("Test", () => "TestPage");
app.MapControllers();
app.UseDeveloperExceptionPage();
app.Environment.ContentRootPath = Directory.GetCurrentDirectory();
app.UseFileServer();
//Run API
app.Run();
//On web app stop terminate program
Task.Run(() =>
{
Program.Terminate();
});
return Task.CompletedTask;
}
IP 和端口在上传此问题之前已更改。
如果我的英语不好,我很抱歉,这不是我的母语。
感谢您的回答。
【问题讨论】:
标签: c# .net asp.net-web-api kestrel-http-server self-hosting