加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:43:16 所属栏目:百科 来源:网络整理
导读:我正在尝试检测ASP.NET应用程序何时被回收,因为正在修改web.config文件或手动回收IIS应用程序池. 最初我认为ASP.NET的Application_End方法可以工作,并尝试以下: protected void Application_End(object sender,EventArgs e){ File.AppendAllText("log.txt",
我正在尝试检测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事件只有一次触发.

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

解决方法

以下可能是一个黑客,但您可以使用应用程序缓存来计算出来.每次加载一个页面,您可以检查特定密钥的缓存,如果密钥不存在,那么您可以将其视为“回收”,然后添加密钥.不是最好的方法,但可能适用于您需要的.

例如.在您的基页的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将是执行此操作的最可靠的地方,但它遇到与黑客相同的问题,事实上它在第一个请求的回收之后发生.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读