Подтвердить что ты не робот

Увеличьте время ожидания запроса веб-приложения azure

Есть ли способ увеличить тайм-аут запроса для лазурных веб-приложений?

Если я задерживаю запрос чем-то более чем за 2 минуты, запрос прерывается без ошибок (пустая страница возвращается) или неопределенный ответ 503.

    public ActionResult Index()
    {
        System.Threading.Thread.Sleep(230000);
        return View();
    }

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

4b9b3361

Ответ 1

Нет, вы не можете увеличить время ожидания для служб приложений Azure (оно составляет 230 секунд). Вы можете перейти к облачным службам или IIS, размещенным на виртуальной машине, где вы можете управлять этими настройками. Вы также можете перейти к асинхронной модели, в которой клиент делает запрос, получает какой-то билет или идентификатор, который может опрашивать, чтобы увидеть, завершена ли обработка. Существует множество примеров моделей асинхронного типа для веб-приложений, из которых вы можете выбирать. Ссылка: https://social.msdn.microsoft.com/Forums/en-US/05f254a6-9b34-4eb2-a5f7-2a82fb40135f/time-out-after-230-seconds?forum=windowsazurewebsitespreview

Ответ 2

Надеюсь, что это будет некоторая помощь https://azure.microsoft.com/en-us/blog/new-configurable-idle-timeout-for-azure-load-balancer/. Но я думаю, что эта плохая идея хранит запрос, а какая-то тяжелая работа выполняется. Imho, вам лучше выполнить фоновое задание и время от времени проверять его статус от клиента.

Ответ 3

Попробуйте сделать свое действие Async, если оно должно быть длинным, чтобы избежать блокировок на вашем веб-сервере:

public async Task<ActionResult> Index()
{
    await Task.Delay(230000);
    return View();
}

И вы можете установить время ожидания script в коде контроллера:

HttpContext.Current.Server.ScriptTimeout = 300;

Обратите внимание, что HttpContext создается для каждого запроса, поэтому он возвращается к значению по умолчанию для следующего запроса

Ответ 4

Вы можете развернуть веб-приложение с помощью скрипта автоматизации и добавить эту строку в разделе "ресурсы":

        {
          "name": "WEBSITES_CONTAINER_START_TIME_LIMIT",
          "value": 1800
        },

где значение по умолчанию 230, но может быть увеличено до 1800. Вы также можете добавить новый параметр в разделе "Настройки приложения" с именем WEBSITES_CONTAINER_START_TIME_LIMIT и со значением секунд, которое вы хотите.