3

ASP.NET Web アプリケーションが 20 分間アイドル状態になった後、IIS が自動的にオフにしたことに気付きました。ウェブサイトは Godaddy.com でホストされています。

以下は、Application_Start メソッドと Application_End メソッドをログに記録する Global クラスです。そして、アップロードした画像は、私が見た結果です。

06:22:01 に行った最後の呼び出しの後、2013-05-24 06:42:40 にオフになりました。(20 分、フア...)
1 日後、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 分ごとに 1 ページを読み取るタイマーを作成するのが 1 つの秘訣です。

アプリの起動時に起動し、アプリがオフになったら停止することを忘れないでください。

// 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"));
    }
}

1 つ注意してください。必要でない限り、このトリックを使用しないでください。永遠に存続するもう​​ 1 つのスレッドを作成するためです。通常、Google は Web ページを読み取り、それを「ウォーム」に保ちます。Google や他の検索エンジンがインデックスを作成し始めていない非常に新しいサイトがある場合、または変更されない 1 つの 2 つのページのみがある場合、通常、自動オフが発生します。

したがって、私はそれを行うことをお勧めしません-サイトを閉じてリソースを節約することは悪くありません.

類似記事。

ASP.Net Web サイトを 24 時間 365 日いつでも暖かく高速に維持
IIS 7.5 用のアプリケーション初期化モジュール
自動起動 ASP.NET アプリケーション (VS 2010 および .NET 4.0 シリーズ)

于 2013-05-25T14:13:05.070 に答える