你能阻止你的ASP.NET应用程序关闭吗?

时间:2009-08-20 13:57:33

标签: c# asp.net iis

我想我听说ASP.NET应用程序会在闲置一段时间后关闭(即没有访问者)。

有没有办法防止这种行为发生?我有一个计时器,它运行来自global.asax.cs application_start事件的一些代码,并希望确保它继续运行,即使没有访问者访问该站点。

提前致谢!

4 个答案:

答案 0 :(得分:27)

你可以通过几种方式实现。

  1. 如果您可以控制IIS,则可以更改应用程序池中的“空闲超时”,默认为20分钟。
  2. 如果您无法控制IIS(共享或其他主机),则可以使用外部服务ping该站点。 MyWebKeepAlivePingdom是很好的选择。
  3. 如果您在选项二下,我强烈建议使用外部源,因为它管理较少,如果您没有可配置的IIS,则很可能没有可用的服务器来添加ping申请。

    此外,我不建议使用Web应用程序进行处理,因为我发现当应用程序确实需要回收时会出现问题......

    最后一个想法

    如果您确实采用了修改IIS空闲超时的路线,我建议您设置应用程序池的常规回收。由于许多Web应用程序确实受益于定期循环,最常见的是空闲超时是最大的常规循环因子。

答案 1 :(得分:18)

除了外部保持活着,你可以在global.asax内部保持活着:

    static Thread keepAliveThread = new Thread(KeepAlive);

    protected void Application_Start()
    {
        keepAliveThread.Start();
    }

    protected void Application_End()
    {
        keepAliveThread.Abort();
    }

    static void KeepAlive()
    {
        while (true)
        {
            WebRequest req = WebRequest.Create("http://www.mywebsite.com/DummyPage.aspx");
            req.GetResponse();
            try
            {
                Thread.Sleep(60000);
            }
            catch (ThreadAbortException)
            {
                break;
            }
        }
    }

答案 2 :(得分:7)

在IIS 6中,转到“应用程序池”部分,然后右键单击>承载有问题的ASP.NET应用程序的池上的属性。转到“性能”选项卡,取消选中“空闲后关闭工作进程:”

在IIS 7中,转到“连接”窗格并找到“应用程序池”,然后为承载应用程序的池选择“高级设置”。找到“空闲超时”属性并将其设置为“0”(这会禁用它)。

默认值为20分钟不活动。通过取消选中该框,一旦您的AppDomain被工作进程加载,它将永远不会死亡(除非您终止进程或其他事情)。默认情况下,IIS将在达到某个限制(例如内存上限)时回收该进程,但它也将启动一个新进程并“逐步”处理所有传入请求,直到旧的请求未使用,以便最大限度地减少中断。 / p>

如果您无法直接控制IIS配置(例如,共享主机),最好的办法是在一个单独的系统上运行一个小应用程序 - 比如一个永远在线的工作站 - 每个x都会访问您的网站几分钟,以防止应用程序池超时。没什么好看的 - 控制台应用程序中的简单WebRequest和while()循环都可以。

答案 3 :(得分:0)

转到您的任务管理器并杀死w3wp.exe(或aspnet_wp)。没有什么可以阻止你这样做。最重要的是,ASP.NET应用程序无法承担连续的功能。

但是,您可以启动一个单独的线程,只要它有事可做,它就不会受到空闲超时的影响。我已经使用这种技术来控制45分钟的导入,无论是否有人在网站上都可以继续导入。我使用了一个事务日志和Application_Start,这样当流程被回收时,它就会从中断的地方开始。