【问题标题】:Selfhosted ASP.Net Application closes to early自托管 ASP.Net 应用程序提前关闭
【发布时间】:2022-06-15 20:16:54
【问题描述】:

我有一个在 Kestrel 服务器(自托管)上运行的 ASP.Net API。它正在接收请求,一切都按我的意愿工作,但是当控制台关闭时,我的应用程序会尝试将重要数据保存到磁盘,下次启动时将需要这些数据。这需要一些时间,通常应用程序会等到任务完成,然后以代码 0 退出。但我必须首先杀死在自己的线程上运行的应用程序的 webapp 部分,这样就不会有新的请求进来。这是可行的,但如果保存时间超过 5 秒,应用程序将在没有警告的情况下终止。这会破坏正在保存的数据,这显然是一个大问题。没有抛出异常。

  • .Net Web 应用程序停止后是否会终止应用程序?
  • 如果是,我可以阻止我这样做吗?
  • 还有什么可能导致 Web 应用程序终止整个应用程序?

我正在使用:

  • .Net 6.0
  • Visual 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


    【解决方案1】:

    现在可以了。我不知道为什么,但确实如此。

    【讨论】:

      猜你喜欢
      • 2017-01-13
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      • 2020-08-11
      • 2015-01-29
      • 1970-01-01
      • 2012-11-25
      • 2012-11-21
      相关资源
      最近更新 更多