Предотвращение IIS от простоя при выполнении фоновых задач - PullRequest
0 голосов
/ 28 января 2020

В нашем ASP. Net Core Web API мы использовали Hosted Services для выполнения некоторых фоновых задач. Иногда возможно, что выполнение этих фоновых задач займет много времени (около часа). Все работает без проблем, кроме случаев, когда есть длительные задачи.

Значение по умолчанию для пула приложений IIS для времени ожидания составляет 20 минут. Поэтому при отсутствии запроса в течение 20 минут IIS перезапускает пул приложений. Но иногда возможно, что фоновая задача выполняется и IIS перезапускается независимо от того, что вызывает резкое завершение задач без пометки о том, что они завершены. Как только IIS запускается, задачи запускаются обработкой запуска размещенной службы. Но перед завершением IIS перезапускается, и это может go продолжаться вечно. Это может вызвать много проблем, когда есть задачи отправки электронной почты, когда одно и то же письмо может быть отправлено несколько раз.

Поскольку хостинговые сервисы являются первоклассным гражданином ASP. NET Core, было бы идеально, если IIS также учитывает фоновые исполнения при тайм-аутах простоя.

Прямо сейчас мы преодолели эту проблему, установив для Idle Timeout значение 0, чтобы оно никогда не превышало время ожидания. Это своего рода хакерское решение. Кроме того, это нереальный вариант в средах с балансировкой нагрузки, когда узлы динамически добавляются и удаляются.

Есть ли лучший способ «запретить перезапуск IIS во время фонового выполнения»?

Спасибо

Ответы [ 2 ]

2 голосов
/ 28 января 2020

Рассмотрите возможность использования Hangfire , предназначенного для таких задач. В настоящее время IIS можно настроить для постоянного запуска сайта.

  1. Щелкните правой кнопкой мыши имя сайта> Управление веб-сайтом> Продвижение>, чтобы убедиться, что для предварительной загрузки задано значение true.

  2. Щелкните правой кнопкой мыши пул приложений> Дополнительные настройки> Тайм-аут простоя (минуты) до 0 и режим запуска всегда работает.

1 голос
/ 28 января 2020

Я не знаю ваших настроек, но, возможно, вы пропускаете IIS и используете что-то вроде Kestrel.

Кроме того, я бы не стал запускать очень долго выполняемые задачи, такие как отправка электронных писем, в процессе IIS. Вместо этого поместите его в другой процесс, например консольное приложение, и оставьте приложение apsnetcore для обслуживания запросов пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...