3

我刚刚注意到 IIS 在空闲 20 分钟后自动关闭了我的 ASP.NET Web 应用程序。该网站托管在 Godaddy.com 上。

下面是记录 Application_Start 和 Application_End 方法的 Global 类。我上传的图像是我看到的结果。

我在 06:22:01 最后一次通话后,它在 2013-05-24 06:42:40 关闭。(20分钟,华...)
一天后,我在2013-05-25 03:05:27又打了一个电话,网站被唤醒。

奇怪的?我不想让我的网站休眠。有什么办法让它一直保持清醒吗?

public class Global : HttpApplication
{
    private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

    protected void Application_AuthenticateRequest(object sender, EventArgs e)
    {
        log.Debug("Application_AuthenticateRequest -> " + base.Context.Request.Url);
    }

    protected void Application_End(object sender, EventArgs e)
    {
        log.Info("Application_End");
    }

    protected void Application_Start(object sender, EventArgs e)
    {
        log.Info("Application_Start");
    }
}

IIS 自动关闭了我的应用程序?

4

1 回答 1

3

如果您在一段时间内没有任何请求以节省资源,则 IIS/asp.net 将关闭应用程序。

现在,如果您希望避免它,这通常在服务器端处理,但在您的情况下,您不能干扰 IIS 设置,因此一个技巧是创建一个每 10 分钟左右读取一页的计时器。

您在应用程序启动时启动它,并且在应用程序关闭时不要忘记停止它。

// use this timer (no other)
using System.Timers;

// declare it somewhere static
private static Timer oTimer = null;

protected void Application_Start(object sender, EventArgs e)
{
    log.Info("Application_Start");

    // start it when application start (only one time)
    if (oTimer == null)
    {
        oTimer = new Timer();

        oTimer.Interval = 14 * 60 * 1000; // 14 minutes
        oTimer.Elapsed += new ElapsedEventHandler(MyThreadFun);
        oTimer.Start();
    }   
}

protected void Application_End(object sender, EventArgs e)
{
    log.Info("Application_End");

    // stop it when application go off
    if (oTimer != null)
    {
        oTimer.Stop();

        oTimer.Dispose();
        oTimer = null;
    }   
}


private static void MyThreadFun(object sender, ElapsedEventArgs e)
{
    // just read one page
    using (System.Net.WebClient client = new System.Net.WebClient())
    {
        client.DownloadData(new Uri("http://www.yoururl.com/default.aspx"));
    }
}

请注意,除非您需要,否则不要使用此技巧,因为您会创建一个永远存在的线程。通常谷歌会读取网页并保持“温暖”,如果您有一个非常新的网站,谷歌和其他搜索引擎没有开始索引,或者如果您只有一个永远不会改变的两页,则通常会发生自动关闭。

所以我不建议这样做 - 关闭您的网站并节省资源也不错,并且您的网站从任何被遗忘的开放记忆中清除并重新开始......

类似文章。

为 IIS 7.5自动启动 ASP.NET 应用程序(VS 2010 和 .NET 4.0 系列)保持 ASP.Net 网站的温暖和快速 24/7
应用程序初始化模块

于 2013-05-25T14:13:05.070 回答