【问题标题】:How to detect dnx451 web application shutdown in AspNet5 / Mvc6?如何在 AspNet5 / Mvc6 中检测 dnx451 Web 应用程序关闭?
【发布时间】:2016-01-31 04:01:10
【问题描述】:

为了能够关闭后台进程(使用 Quartz.Net 实现),我需要在 AspNet5 beta8 中检测 Web 应用程序关闭。在以前的 Asp.Net 版本中,可以在 Application_End 上执行代码。 AspNet5 中的 Application_End 事件等价物是什么?

到目前为止,我在 Configure 中尝试了 IApplicatonLifetime,但是当我停止 Web 应用程序时它不会触发:

public void Configure(IApplicationBuilder app, IApplicationLifetime lifetime)
{
    lifetime.ApplicationStopping.Register(() =>
    {
        Logger.LogInformation("Application Stopping. Do stuff.");
    });

    lifetime.ApplicationStopped.Register(() =>
    {        
        Logger.LogInformation("Application Stopped. Do stuff.");
    });
}

我没有收到关于 ApplicationStopping 和 ApplicationStopped 的任何响应。

【问题讨论】:

    标签: asp.net-mvc asp.net-core asp.net-core-mvc application-shutdown


    【解决方案1】:

    我尝试了旧版本(beta5),您的代码运行良好。 ApplicationStopping 和 ApplicationStopped 在使用 IIS Express 并正常停止站点时触发。

    beta8 更改后,IIS 中的这些事件似乎存在问题。 Beta8 changed IIS hosting 所以它使用 HttpPlatformHandler 来启动 dnx 进程。不幸的是,似乎没有收到关闭事件,请参阅the issue(截至今天没有关于该问题的详细信息)。

    我在我的机器上尝试过 beta8,但问题似乎仅限于 IIS:

    • 当我使用 IIS Express 时,只会触发 ApplicationStarted 事件(即使在正常停止站点时也是如此)。
    • 但是,如果我运行 dnx web,则会触发 3 个事件。

    有几种方法可以使用 dnx 命令运行项目:

    • 告诉 Visual Studio 是要使用 IIS Express 还是 dnx 命令来运行项目。运行按钮中有一个下拉菜单:

    • 在您的项目根文件夹中打开一个命令窗口并运行dnx web(假设 web 是您在 project.json 文件中配置的命令)。

    【讨论】:

      猜你喜欢
      • 2011-01-02
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多