20

非アクティブな期間の後に Web ロールにリクエストを行うと、リクエストが非常に遅くなることがわかりました (最大 30 秒)。その最初の要求の後、ロールは本来の役割を果たします。

多くのグーグル検索の後、4 つの異なる戦略 (以下にリスト) に出会いました。

(a) IIS アイドル タイムアウトの無効化RoleEntryPoint.OnStart()

public override bool OnStart()
{
    using (var server = new ServerManager())
    {
        server.ApplicationPoolDefaults.ProcessModel.IdleTimeout = TimeSpan.Zero;
        server.CommitChanges();
    }

    return base.OnStart();
}

これには、ロールが昇格されたレベルで実行されることも必要です。

(b) 通常のリクエストをRoleEntryPoint.Run()

public override void Run()
{
    var localuri = new Uri(string.Format("https://{0}/Help", RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["HttpsIn"].IPEndpoint));

    while (true)
    {
        try
        {
            var request = (HttpWebRequest)WebRequest.Create(localuri);
            request.Method = "GET";
            var response = request.GetResponse();
        }
        catch { }
        System.Threading.Thread.Sleep(3000);
    }
}

(c)preloadEnabledstartModeRoleEntryPoint.OnStart()

public override void OnStart()
{
    using (var serverManager = new ServerManager())
    {
        foreach (var application in serverManager.Sites.SelectMany(x => x.Applications))
        {
            application["preloadEnabled"] = true;
        }

        foreach (var applicationPool in serverManager.ApplicationPools)
        {
            applicationPool["startMode"] = "AlwaysRunning";
        }

        serverManager.CommitChanges();
    }

    return base.OnStart();
}

(d) そして最後に、Azure の「Always On」を使用します (編集: 残念ながら、これは Azure Web サイト専用です!)

Azure ロールは常にオン

これらの戦略のどれを実行する必要がありますか?

4

2 に答える 2