Mar*_*tin 10 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");
}
Run Code Online (Sandbox Code Playgroud)
该文件是在第一次更改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
}
Run Code Online (Sandbox Code Playgroud)
当回收发生时,此方法不会拾取它。它只会在回收后的第一个请求上识别回收。
这Application_Start将是执行此操作的最可靠的地方,但它遇到与黑客相同的问题,因为它发生在第一个请求的回收之后。
| 归档时间: |
|
| 查看次数: |
8556 次 |
| 最近记录: |