Запуск фонового процесса на основе очереди на внешнем веб-сайте - PullRequest
1 голос
/ 30 декабря 2010

У меня есть веб-приложение ASP.NET MVC, которое размещается на внешнем поставщике в IIS 7.

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

Кажется, что нормальный способ сделать это с помощью Microsoft Message Queue, но, поскольку это размещенная среда, которой я не могу напрямую управлять, я не смогу установить или настроить MSMQ.

Пока что я решил сделать это, добавив строки в таблицу в моей базе данных SQL Server (тот же хостинг).

Так как мне реализовать бит, где я проверяю отставание и отправляю электронные письма?

Должен ли это быть какой-то отдельный поток в моем главном веб-приложении, который перезапускается каждые 15 минут?

Другой вариант, который я рассмотрел, - это просто открыть интерфейс HTTP-POST, который при вызове с соответствующим паролем администратора запускает итерацию отправителя электронной почты.

Затем я мог бы создать небольшое консольное приложение на локальном ПК, которое будет вызывать интерфейс каждые 15 минут.

Первый вариант проще, но второй может быть более надежным.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 30 декабря 2010

Я бы порекомендовал вам взглянуть на Quartz.NET . Также важно помнить, что веб-сервер может выгружать приложение ASP.NET из памяти, если оно не используется, а это означает, что все созданные потоки просто умрут. Это одна из причин, по которой такие задачи не должны выполняться в приложениях ASP.NET, а должны выгружаться в службах Windows.

2 голосов
/ 01 февраля 2011

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

http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

Я сделал нечто похожее наэто в прошлом отправка писем каждый день.Служба не была существенной, и не имело значения, пропустили ли электронные письма день или два, поскольку они в конечном счете вышли бы, но система работала довольно хорошо.Это все asp.net, поэтому отлично работает в среде хостинга, которую я использую, без доступа к сервису на сервере или создания локального триггера с вашего рабочего стола.

...