Стратегии «разогрева» веб-роли Azure [закрыто]

Я обнаружил, что выполнение запросов к нашей веб-роли после периодов бездействия приведет к очень медленному запросу (до 30 секунд). После этого первоначального запроса роль будет работать как надо.

После долгих поисков я наткнулся на четыре разные стратегии (перечислены ниже):

(a) Отключение времени ожидания IIS вRoleEntryPoint.OnStart()
public override bool OnStart()
{
    using (var server = new ServerManager())
    {
        server.ApplicationPoolDefaults.ProcessModel.IdleTimeout = TimeSpan.Zero;
        server.CommitChanges();
    }

    return base.OnStart();
}

Это также требует, чтобы роль выполнялась на повышенном уровне.

(б) Выполнять регулярные запросы в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);
    }
}
(в) УстановитьpreloadEnabled а такжеstartMode вRoleEntryPoint.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 «Всегда включено» (РЕДАКТИРОВАТЬ: К сожалению, это только для веб-сайтов Azure!)

Какую из этих стратегий я должен выполнить?

Ответы на вопрос(2)

Ваш ответ на вопрос