Увеличьте время ожидания запроса веб-приложения azure
Есть ли способ увеличить тайм-аут запроса для лазурных веб-приложений?
Если я задерживаю запрос чем-то более чем за 2 минуты, запрос прерывается без ошибок (пустая страница возвращается) или неопределенный ответ 503.
public ActionResult Index()
{
System.Threading.Thread.Sleep(230000);
return View();
}
У меня есть несколько длительных запросов, которые мне нужно запускать (загрузка больших файлов/больших заданий преобразования PDF) - есть ли способ обойти это? Я бы предпочел избежать использования виртуального хостинга. Я пробовал масштабирование веб-приложения по базовым или стандартным планам, но, похоже, это не имеет никакого значения.
Ответы
Ответ 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 и со значением секунд, которое вы хотите.
Ответ 5
У вас есть некоторые изменения в web.config
<system.webServer>
<monitoring>
<triggers>
<statusCode>
<addstatusCode="500"subStatusCode="0"win32StatusCode="0"
count="10"timeInterval="00:00:30" />
</statusCode>
</triggers>
<actionsvalue="Recycle" />
</monitoring>
Подробнее:
Время ожидания подключения (истечение срока ожидания) на сайте Azure Web App