定期向self执行webrequest,以防止IIS终止应用程序

定期向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

为什么这不起作用?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分钟访问一次我自己的网站(带有webrequest)

这样,IIS就不应该认为我的网站是空闲的,因为它会获得访问,但它会杀死应用程序


那么:有没有可能每5分钟就假装访问我自己的站点,这样它就不会被杀死?

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

一个更可靠的解决方案是按照说明使用
IRegisteredObject

最后,您确定
MyURL
是正确的吗?为此检查IIS日志


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

您发布的代码实际上只调用了一次守护进程()。然后该方法休眠并返回。你应该使用计时器或类似的东西来重复调用它,除非我在你发布的代码中遗漏了什么。

我做了类似的事情(VB脚本),但我每60秒做一次。试试看?尊重你的第一段:计时器/任务完成的工作是一次访问。。。因此IIS或ASP.NET应该将其作为普通的web客户端(如打开站点的浏览器)。也许空闲超时不考虑“本地访问”吗?