为什么这不起作用?无论如何,IIS在20分钟后杀死了我的应用程序
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分钟访问一次我自己的网站(通过网络请求)。
这样,IIS不应该认为我的网站是空闲的,因为它获得了访问权限,但无论如何都会杀死应用程序。
那么:是否有可能每5分钟假冒一次访问我自己的网站,以免它被杀?
答案 0 :(得分:0)
问题是ASP.NET不知道在使用计时器或任务生成的后台线程上完成的工作。它只知道与请求相关的工作。 ASP.NET根本不知道你正在做的工作,这不会阻止IIS / ASP.NET关闭你的网站。
更强大的解决方案是使用IRegisteredObject
作为解释here。
最后,您确定MyURL
是否正确?检查IIS日志以获取此信息。
最后²,也许最好的解决方案是在IIS中禁用空闲超时:只需在池的高级设置中更改“空闲超时”。
答案 1 :(得分:0)
您发布的代码实际上只调用DaemonStuff()
一次。那个方法然后睡觉并返回。您应该使用计时器或类似的东西重复调用它,除非我在您发布的代码中遗漏了某些内容。