2016-07-14 2 views
2

Я создал сайт asp.net с кварцевым планировщиком. Работа выполняется в фоновом режиме, и на сайте нет другой активности.C# - Quartz scheduler перестает работать, когда на сайте нет активности

Планировщик кварца, запланированный на каждые 30 минут.

После запуска IIS Планировщик работает правильно.

Но через какое-то время Планировщик остановился (около 1 часа).

Если у вас есть одно или несколько действий на сайте в качестве пользователя для входа в систему или просмотреть панель мониторинга, тогда планировщик работает правильно.

Но если на работе нет активности, она перестает работать.

Как сохранить мой Планировщик на все времена, когда на сайте нет активности?

P/s: Я знаю, что мой вопрос может быть дубликат с другим вопросом. Но я все еще спрашиваю, потому что я не могу комментировать, чтобы спросить в ответах на другой вопрос.

Edit:

Day Running at: 7/14/2016 4:00:00 AM 
-- 
Day Running at: 7/14/2016 4:30:00 AM 
-- 
Day Running at: 7/14/2016 5:00:00 AM 
-- 
Stopped running 
-- 
Day Running at: 7/14/2016 2:00:00 PM 
-- 
Day Running at: 7/14/2016 2:30:00 PM 
-- 
Day Running at: 7/14/2016 3:00:00 PM 
-- 
Stopped running 
-- 

ответ

5

По умолчанию, IIS выгрузит приложение, если приложение не получает никаких запросов на определенный период времени.

Вы можете настроить IIS, чтобы никогда не выгружать приложение. Существует множество причин, по которым IIS выгрузит ваше приложение - убедитесь, что вы отключили все из них. Он находится в настройках пула приложений, лучше перейдите в «Дополнительные настройки» и тщательно просмотрите все их.

На стороне примечания, если у вас есть фоновая работа, вам необходимо надежно запустить по расписанию, почему бы не развернуть ее в службе Windows, в дополнение к веб-приложению? Веб-приложения лучше всего обслуживают входящие запросы, а не выполняют запланированные задания.

UPDATE

Заканчивать их в расширенных настройках пула приложений:

  • Process Model/ожидания тайм-аута и ожидания времени ожидания действий/Interval основное время
  • Recycling, Ограничение лимита, Ограничение частной памяти, Ограничение виртуальной памяти
+0

У меня есть некоторые причины, чтобы использовать фоновую работу в веб-приложения. Я попытался увеличить время ожидания сеанса сеанса, но моя работа все еще не работала. Итак, можете ли вы предложить мне некоторые причины, по которым IIS выгрузит мое приложение? – TonyBui

+0

@TonyBui: общий хостинг? :) –

+0

@ AndreiRînea: Нет, я размещаю свое веб-приложение на частном хостинге. – TonyBui

2

Обычно you shouldn't use ASP.NET for recurring tasks потому что он не построен для этого, для этого рекомендуется использовать службу Windows.

Однако, вы можете использовать WebBackgrounder. Скотт Гензельман, кажется, endorse it;) Он также демонстрирует, как использовать Quartz.NET вместе с ним.


Или вы могли бы запустить поток, который генерирует запросы из вашего приложения в себя каждую минуту, чтобы сохранить его:

protected void Application_Start() 
    { 
     // ... 

     ThreadPool.QueueUserWorkItem(o => PingMyself()); 
    } 

    private static void PingMyself() 
    { 
     var webClient = new WebClient(); 
     while (true) 
     { 
      Thread.Sleep(TimeSpan.FromMinutes(1)); 
      webClient.DownloadString("http://my.public.address.com"); 
     } 
    } 
Смежные вопросы