2013-07-21 37 views
0

为什么不能正常工作? 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分钟假冒一次我自己的网站,以免它被杀?

+0

我做了类似的事情(VB脚本),但我每60秒做一次。试试吗? –

回答

0

问题是ASP.NET不知道使用计时器或任务生成的后台线程上所做的工作。它只知道与请求相关的工作。 ASP.NET根本不知道你正在做的工作,这不会阻止IIS/ASP.NET关闭你的网站。

更强大的解决方案是使用IRegisteredObject作为解释here

最后,你确定MyURL是正确的吗?检查IIS日志。

最后²,也许最好的解决方案是禁用IIS中的空闲超时:只需在池的高级设置中更改“空闲超时”即可。

+0

尊重你的第一段:由该计时器/任务所完成的工作是一次访问......所以IIS或ASP.NET应该将此作为一个普通的Web客户端(如浏览器打开该站点)。也许IIS空闲超时不考虑“本地访问”? – sports

0

您发布的代码实际上只需要调用DaemonStuff()一次。该方法然后睡觉并返回。你应该使用一个计时器或类似的东西来重复地调用它,除非我在你发布的代码中丢失了某些东西。

+0

是在示例中的代码缺少一个无限循环或计时器... – sports