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, но проблема в том, что эти веб-задания переключаются вместе со слотом. Т.е. добавив задание к одному слоту после переключения это задание перейдёт ко второму слоту. А т.к. слот не используется, то его работа не гарантируется, он может выгрузиться из памяти вместе с веб-заданием.

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

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

Войти через центр авторизации
Похожие вопросы