Способы планирования задач (без написания планировщика окон) в asp.net - PullRequest
6 голосов
/ 14 июля 2010

Я нахожусь в виртуальном хостинге, и они не позволяют мне использовать планировщик Windows ... Так, каковы способы выполнения запланированных задач, т. Е. (Временная почта) в asp.net ... Я только что видел фоновый процесс блогом Джеффа Этвуда ... Это достоверно?Или любые другие способы выполнения запланированных задач ...

Затем я нашел quartz.net , но я не могу найти простой пример, который встраивает quartz.net в asp.net ( без установки сервера Quartz.Net в качестве автономной службы Windows ) ... Любое предложение на quartz.net ...

Ответы [ 6 ]

3 голосов
/ 14 июля 2010

Вы можете просто написать страницу ASP.Net, которая выполняет вашу задачу, например, отправку писем.Затем воспользуйтесь онлайн-сервисом планирования, например SetCronJob , чтобы вызвать URL-адрес страницы на вашем сервере по расписанию.

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

1 голос
/ 14 июля 2010

Я исследовал Класс сборки Microsoft.Web.Administration Class Schedule Class , чтобы добиться того же, но кажется, что класс можно использовать только для планирования перезапуска рабочего процесса IIS, вот пример создания приложенияпулы и настройка периодического перезапуска .

Таким образом, единственным способом было запланировать с этим перезапуск приложения ASP.NET, а затем в Application_Start выполнить запланированную работу. Но это уродливый взлом, а не решение , так что в итоге я добавил возможности планирования в нашу домашнюю службу резервного копирования Windows, которая уже работала на веб-сервере, поэтому IMO Quartz.net - лучшее решение для вас.Может быть, вы могли бы убедить вашего веб-провайдера установить Quartz.net, все остальные решения кажутся хаком, который доставит вам больше или меньше проблем.

0 голосов
/ 14 июля 2010

System.Timers.Timer - http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx

запустите его в вашем global.asax

0 голосов
/ 14 июля 2010

У меня была та же самая проблема не так давно, и если не использовать сторонние сервисы, то нет хороших способов обойти это.

Тем не менее, я использовал объект .NET Application Cache со сроком действия 24 часа.

Cache["DailyTask"] = true;

Затем в моем классе базовой страницы каждый раз, когда был сделан запрос страницы, я проверял наличие этой переменной и, если она существовала, запускал задачу. Недостатком этого является то, что в этом случае вы полагаетесь на запросы страниц, поданные в ваше приложение.

Наконец, еще один способ, которым я видел это, - установить обратный вызов по истечении срока действия кэша (метод CacheItemRemovedCallback), а затем связать этот метод для вставки нового элемента в кеш, который также имеет обратный вызов, и поэтому цикл повторяется.

0 голосов
/ 14 июля 2010

Вы можете взять идею из этого и поместить свою задачу в метод KeepAlive. Надежда! Это помогает.

...