c# - 检测 ASP.NET 应用程序何时回收

标签 c# asp.net iis application-pool

我试图检测 ASP.NET 应用程序何时由于 web.config 文件被修改或 IIS 应用程序池被手动回收而被回收。

最初我认为 ASP.NET 的 Application_End 方法会起作用,并尝试了以下方法:

protected void Application_End(object sender, EventArgs e)
{
    File.AppendAllText("log.txt", DateTime.Now + "\n");
}

该文件是在第一次更改 web.config 文件时创建的,但后续更改不会触发该事件。同样,在 IIS 中进行测试时,第一个手动应用程序池回收创建了文件,但后来的没有创建文件 - 就好像 Application_End 事件只触发一次。

我如何检测池/应用程序每次回收?

最佳答案

以下内容可能有点乱,但您可以使用应用程序 Cache 来解决它。每次加载页面时,您都可以检查缓存中的特定键,如果该键不存在,那么您可以将其视为“回收”,然后添加该键。不是最好的方法,但可能正好满足您的需要。

例如。在您的基本页面的 Page_Load 或将随每个请求一起运行的某个地方,您可以执行以下操作:

if (HttpContext.Current.Cache["RecycleCheck"] != null)
{ 
    // Add flag to cache
    HttpContext.Current.Cache.Insert("RecycleCheck", "1", null,
        DateTime.UtcNow.AddDays(2),  // 2 days (most will recycle by then)
        System.Web.Caching.Cache.NoSlidingExpiration);

    // Do what you need because a recycle has happened
}

此方法不会在回收发生时将其拾取。它只会在回收后的第一个请求上识别回收。

Application_Start 将是最可靠的执行此操作的地方,但它遇到与 hack 相同的问题,因为它发生在第一次请求的回收之后。

关于c# - 检测 ASP.NET 应用程序何时回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7271733/

相关文章:

c# - 如何在 Windows 应用程序中将相对路径转换为绝对路径?

c# - “Owin.IAppBuilder”不包含 'MapSignalR' 的定义

c# - 如何正确地将 TextBox 文本与 ViewModel 属性绑定(bind)

asp.net - Type 和 Sys not defined JavaScript 错误

javascript - IIS 托管和 IE 的 create-react-app 问题

c# - 延迟 API 操作

javascript - event.item.valueField 显示未定义

asp.net - 从 ASP.NET 禁用所有浏览器的浏览器缓存

PHP 和 IIS7--> 我更新了环境 %PATH% 但 PHP 的路径没有更新,即使在循环 IIS 之后也是如此

asp.net 模拟用户进行网络资源访问