定期向self执行webrequest,以防止IIS终止应用程序
为什么这不起作用?IIS会在20分钟后终止我的应用程序定期向self执行webrequest,以防止IIS终止应用程序,iis,asp.net-mvc-4,keep-alive,system-idle-process,Iis,Asp.net Mvc 4,Keep Alive,System Idle Process,为什么这不起作用?IIS会在20分钟后终止我的应用程序 protected void Application_Start() { Task.Factory.StartNew(() => DaemonStuff()); } private void DaemonStuff() { // Ping to self MyWebRequest selfRequest = new MyWebRequest(My
protected void Application_Start()
{
Task.Factory.StartNew(() => DaemonStuff());
}
private void DaemonStuff()
{
// Ping to self
MyWebRequest selfRequest = new MyWebRequest(MyURL, "GET");
selfRequest.GetResponse();
// Sleep
Thread.Sleep(1000 * 60 * 5);
}
我在这里做的是每5分钟访问一次我自己的网站(带有webrequest)
这样,IIS就不应该认为我的网站是空闲的,因为它会获得访问,但它会杀死应用程序
那么:有没有可能每5分钟就假装访问我自己的站点,这样它就不会被杀死?问题是ASP.NET不知道在使用计时器或任务生成的后台线程上完成的工作。它只知道与请求相关联的工作。ASP.NET根本不知道您正在做的工作,这不会阻止IIS/ASP.NET关闭您的网站 一个更可靠的解决方案是按照说明使用
IRegisteredObject
最后,您确定MyURL
是正确的吗?为此检查IIS日志
最后,也许最好的解决方案是禁用IIS中的空闲超时:只需在池的高级设置中更改“空闲超时”。您发布的代码实际上只调用了一次守护进程()。然后该方法休眠并返回。你应该使用计时器或类似的东西来重复调用它,除非我在你发布的代码中遗漏了什么。我做了类似的事情(VB脚本),但我每60秒做一次。试试看?尊重你的第一段:计时器/任务完成的工作是一次访问。。。因此IIS或ASP.NET应该将其作为普通的web客户端(如打开站点的浏览器)。也许空闲超时不考虑“本地访问”吗?