2012-01-11 3 views
1

В проекте, над которым я работаю, пользователи могут подписаться на курс. Продолжительность курса варьируется, рассчитывается в неделях (так 4, 5 или 6 недель). Они могут подписаться в любой момент, поэтому дата начала для каждого пользователя отличается.Выберите пользователей для отправки еженедельного обновления

Теперь я хочу отправить пользователям персонализированную электронную почту в начале каждой недели (так, когда они войдут во вторую, третью и т. Д.). Электронная почта разная неделя.

Я знаю, что мне нужно написать задание и запланировать это на регулярной основе, но я не уверен, как выбрать правильных пользователей. Я мог бы написать SQL-команду, выбрав всех пользователей, где дата начала 7, 14, 21 или 28 дней назад, и вычислить, на какой неделе они находятся, но это кажется довольно склонным к ошибкам (что, если задача не выполняется, тогда они не получат сообщение в следующем цикле задач).

Что было бы лучшим способом достичь этого?

Проект представляет собой приложение ASP.NET MVC в C#, с NHibernate в IIS.

+1

«Что делать, если задача не удалась, тогда они не получат сообщение в следующем цикле задач». Если вы хотите восстановить автоматически, вы должны выбрать всех пользователей, которые заходили за последние 28 дней, даже если это не точно 7 , и зайдите в отдельную таблицу «отправили электронную почту пользователя X на дату Y», затем проверьте, есть ли какие-либо неподтвержденные письма для отправки. Или сделайте это руководство: отправьте предупреждения администратора о любых сбоях, а затем выполните шаги и исправьте их в день. – Rup

ответ

1

Вы говорите о планировании рабочих процессов, которые происходят в будущем дату и время. это лучше всего обрабатывает планировщик.

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

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

Другой вариант - интегрировать структуру планирования в вашу службу, например quartz.net.

EDIT: То, что вы в настоящее время представляете, - это неявное определение того, что должно произойти. другими словами, в момент отправки напоминания вы рассчитываете, когда и кто должен быть уведомлен.

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

+0

Thanx для вашего ответа, но моя основная проблема - это больше о выборе пользователей, а не о планировании. Но настройка службы Windows действительно является лучшей идеей, чем обработка IIS. И спасибо за ссылку на Кварц, кажется интересным. – Pbirkoff

+0

В конечном итоге я использовал ваши предложения в вашем редактировании. благодаря – Pbirkoff

Смежные вопросы