MVC запланированная отправка почты
У меня есть приложение ASP.NET MVC 4, и я хочу, чтобы оно отправляло отчет по электронной почте каждую неделю. Я читал о Quartz.NET, но он слишком мощный для этой простой задачи. Сейчас я пытаюсь использовать NCron, но для этого требуется инициализатор в Main()
метод (с обязательным параметром args
):
class Program
{
static void Main(string[] args)
{
Bootstrap.Init(args, ServiceSetup);
}
}
Есть ли способ сделать это в Application_Start()
? Что я должен передать как args
пары? Какие еще решения могут решить эту задачу?
2 ответа
Автор NCron говорит...
Первое: я никогда не интегрировал NCron в веб-приложение, и я не уверен, насколько хорошо оно будет работать. Например, как указывает Кеннет, IIS закроет ваше приложение, если оно не получит никакого трафика, и могут быть и другие сбои.
Чтобы интегрировать NCron в веб-приложение, я предлагаю вам игнорировать Bootstrap.Init()
(разработан специально как точка входа в консольные приложения) и скорее работает непосредственно с SchedulingService
:
using (var service = new SchedulingService())
{
service.Hourly().Run<DataUpdateJob>();
service.Daily().Run<RecycleCacheJob>();
service.Start();
}
Опять же: я никогда не делал этого сам, но, пожалуйста, попробуйте, и позвольте мне и всем остальным знать, как вы поживаете.
Вам нужно посмотреть, что делает ncrone с этими параметрами. То, что это делает, это передает аргументы командной строки вашего приложения Windows компоненту. Если вы используете его в веб-приложении, у вас нет аргументов командной строки, поэтому, если ему нужны аргументы, вам придется создавать аргументы самостоятельно (либо жестко запрограммированными, либо из файла конфигурации, либо из базы данных, либо...)
Также возможно, что это необязательно, тогда вы можете просто передать пустой массив (но, опять же, проверьте документы ncrone)
Кроме того, имейте в виду, что, когда ваше приложение закрывается (стандартно, после 20 минут бездействия), ваш cron runner не разбудит его. Если это так, то вам нужно либо поддерживать работоспособность приложения, гарантируя, что по крайней мере один запрос выполняется каждые 20 минут, либо настроить IIS, чтобы он всегда оставался в живых.