0

为什么这不起作用?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 分钟伪造一次对我自己网站的访问,以免它被杀死?

4

2 回答 2

0

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

一个更强大的解决方案是使用IRegisteredObject这里解释

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

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

于 2013-07-22T08:17:06.633 回答
0

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

于 2015-07-02T19:41:59.410 回答