byte916
@byte916

Как правильно выполнять регулярные операции на сайте при использовании слотов?

На Azure используется сайт (Служба приложений).
Для развёртывания без прерывания сервиса используется два слота - новая версия заливается на второй слот, а потом происходит переключение между слотами.
Раз в сутки необходимо делать некие операции, для этого при запуске приложения запускается примерно следующий код
// В Global.asax
protected void Application_Start(){
   // ...
   var t = new Thread(new SomeClass().SomeMethod);
   t.Start;
   // ...
}
// В SomeClass
public void SomeMethod(){
   while (true) {
      // Проверяем что наступили новые сутки и делаем некую работу
      Thread.Sleep(TimeSpan.FromHours(1);
   }
}

Код отрабатывает как надо, всегда во-время, с ним проблем нет.

Но, возникает проблема из-за того, что два слота развёртывания, и соответственно работают два экземпляра сайта. Они срабатывают одновременно, и эта работа выполняется дважды.

Пробовал добавить в параметры боевого слота приложения параметр IsProduction и проверять его при старте задачи
if (Environment.GetEnvironmentVariable("IsProduction") == null || Environment.GetEnvironmentVariable("IsProduction") != "true") return;

Это работает, но иногда, почему то, не срабатывает, подозреваю, после переключения между слотами. Иногда после переключения между слотами второй слот считает себя боевым (IsProduction = true), и код снова срабатывает дважды.

Думал о том, чтобы добавить к сайту WebJobs, но проблема в том, что эти веб-задания переключаются вместе со слотом. Т.е. добавив задание к одному слоту после переключения это задание перейдёт ко второму слоту. А т.к. слот не используется, то его работа не гарантируется, он может выгрузиться из памяти вместе с веб-заданием.

Как правильно реализовать эти регулярные операции только один раз при использовании слотов?
  • Вопрос задан
  • 34 просмотра
Пригласить эксперта
Ответы на вопрос 1
@kttotto
пофиг на чем писать
Тут вариантов особо нет, как только использовать внешний для обоих приложений, но общий для них store: бд, просто файл на диске, сторонний сервис, дергая который будет проверятся последнее время запуска задачи.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы