定期对自己进行webrequest,以防止IIS杀死应用程序

时间:2013-07-21 22:24:18

标签: 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(MyURL, "GET");
        selfRequest.GetResponse();

        // Sleep
        Thread.Sleep(1000 * 60 * 5);

    }

我在这里做的是每5分钟访问一次我自己的网站(通过网络请求)。

这样,IIS不应该认为我的网站是空闲的,因为它获得了访问权限,但无论如何都会杀死应用程序。

那么:是否有可能每5分钟假冒一次访问我自己的网站,以免它被杀?

2 个答案:

答案 0 :(得分:0)

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

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

最后,您确定MyURL是否正确?检查IIS日志以获取此信息。

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

答案 1 :(得分:0)

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