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

Joh*_*ski 17 c# asp.net iis

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

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

提前致谢!

Mit*_*ers 27

你可以通过几种方式做到这一点.

  1. 如果您可以控制IIS,则可以更改应用程序池中的"空闲超时",默认情况下为20分钟.
  2. 如果您无法控制IIS(共享或其他主机),则可以使用外部服务ping该站点. MyWebKeepAlivePingdom是很好的选择.

如果您在选项二下,我强烈建议使用外部源,因为它管理较少,如果您没有可配置的IIS,则很可能没有可用于添加ping应用程序的服务器.

另外,我不推荐与Web应用程序进行同步的东西,因为我发现当应用程序确实需要回收时会出现问题......

最后一个想法

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


Edu*_*rdo 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;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)


小智 7

在IIS 6中,转到"应用程序池"部分,然后右键单击托管相关ASP.NET应用程序的池上的"属性".转到"性能"选项卡,取消选中"空闲后关闭工作进程:"

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

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

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