定期为自己做网络请求以防止IIS终止应用程序
为什么不能正常工作? IIS后20分钟定期为自己做网络请求以防止IIS终止应用程序
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);
}
反正杀死我的应用我在这里做访问是我自己的网站(用WebRequest的)每5分钟。
这样,IIS不应该认为我的网站闲置,因为它获取访问,但它杀死了应用程序。
因此:是否有可能每5分钟假冒一次我自己的网站,以免它被杀?
问题是ASP.NET不知道使用计时器或任务生成的后台线程上所做的工作。它只知道与请求相关的工作。 ASP.NET根本不知道你正在做的工作,这不会阻止IIS/ASP.NET关闭你的网站。
更强大的解决方案是使用IRegisteredObject
作为解释here。
最后,你确定MyURL
是正确的吗?检查IIS日志。
最后²,也许最好的解决方案是禁用IIS中的空闲超时:只需在池的高级设置中更改“空闲超时”即可。
尊重你的第一段:由该计时器/任务所完成的工作是一次访问......所以IIS或ASP.NET应该将此作为一个普通的Web客户端(如浏览器打开该站点)。也许IIS空闲超时不考虑“本地访问”? – sports
您发布的代码实际上只需要调用DaemonStuff()
一次。该方法然后睡觉并返回。你应该使用一个计时器或类似的东西来重复地调用它,除非我在你发布的代码中丢失了某些东西。
是在示例中的代码缺少一个无限循环或计时器... – sports
我做了类似的事情(VB脚本),但我每60秒做一次。试试吗? –