4

为了能够关闭后台进程(使用 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 都没有任何回应。

4

1 回答 1

4

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

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

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

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

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

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

    运行项目时选择 web 或 IISExpress

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

于 2015-10-31T21:49:45.430 回答