Как сохранить quartz.net-планировщик жив?
Я использую quartz на моем веб-сайте asp, я инициализирую планировщик в методе application_start и выключение в методе application_end, мой триггер будет срабатывать каждый день, но я обнаружил, что мой планировщик будет автоматически выключаться, если нет запроса на некоторое время,поэтому мои фоновые работы не будут срабатывать, есть ли лучший способ сохранить жизнь планировщика и только выключение, когда сервер остановился?
5 ответов:
В общем случае, если вам нужно надежное планирование, вы не должны делать это внутри веб-сайта.
Как вы обнаружили, рабочий процесс будет закрыт через некоторое время. Даже если вы заставляете рабочий процесс работать все время, существуют условия, которые могут привести к его завершению. Это просто не очень хорошая идея.
Вместо этого следует написать службу Windows и запустить quartz.net в этом.
Если вы не можете установить службы (допустим, вы находитесь на общем хостинге окружающая среда), то ваши возможности более ограничены.
Я подумал то же самое. В конечном счете, хотя я согласен с общим мнением, я хотел посмотреть, как это можно сделать, потому что я сам был в подобной ситуации, когда Службы Windows были недоступны для меня.
Все, что я сделал, это создал новое задание, которое при выполнении отправляет HTTP-запрос самому приложению. Что касается меня, я указал на страницу, которая просто содержала
@Datetime.Now.ToString()
.Действия отправки HTTP-запроса самому себе должно быть достаточно, чтобы сохранить планировщик (и Родительский рабочий процесс) жив.
Это делает не однако остановить приложение от остановки/рециркуляции без предупреждения. Если вам нужен способ справиться с этим, то вам, вероятно, потребуется больше, чем один сайт, который работает и сам по себе, и на другом сайте. Таким образом, если один сайт выходит из строя, другой может ударить по нему (предполагая, что он запущен), чтобы вернуть его.
Существует конфигурация IIS, которая позволяет рабочим процессам оставаться включенными все время. Я нашел эту настройку через другую ссылку SO answer .
Править C:\Windows\System32\inetsrv\config\applicationHost.конфигурация для включения:
Скотт Гатри (менеджер продуктов Microsoft для .NET) ответил на вопрос, непосредственно связанный с вопросом OP (link ).<applicationPools> <add name="MyAppWorkerProcess" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" /> </applicationPools>
@Dominic Pettifer,
Если я установлю startMode= "AlwaysRunning" делает это означает, что веб-приложение будет "никогда" не выключается и всегда будет работать, даже если нет трафик, попадающий на сайт в течение длительного периода (если, конечно, это не выключение вручную, или сервер выключен / аварийно завершает работу и т. д.)? То причина, по которой я спрашиваю, заключается в том, что мне нравится запускать фоновые потоки / службы на рабочий процесс IIS ASPNET вместо использования служб Windows (мы работа с клиентами с большим количеством ограничений безопасности на их серверах что делает запуск службы Windows трудно или невозможно). Обычно я должен придумать что-то, что периодически попадает на сайт чтобы сохранить рабочий процесс ASPNET живым и остановить его от закрытия вниз.
Это должно означать, что приложение и рабочий процесс всегда бег - так что я думаю, что это действительно хорошо справляется с вашим сценарием для ты.
Надеюсь, это поможет,
Скотт
Гораздо более простой способ-это использовать средство проверки качества. С помощью инструмента Zapix я смог запланировать проверку качества моего сайта каждые 20 минут. Zapix просто посетил сайт и получил ответ http. Используя Zapix, он имитировал функциональность ручного посещения веб-сайта для запуска электронных писем. Таким образом, потоки пула приложений постоянно пробуждаются.