Лучший подход для пакетного процесса электронной почты, который обращается к базе данных веб-приложения - PullRequest
2 голосов
/ 13 декабря 2011

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

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

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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 декабря 2011

Если вы используете SQL Server, он вполне способен отправлять электронные письма самостоятельно.См.

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

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

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

0 голосов
/ 13 декабря 2011

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

Попытка настроить ваше веб-приложение для выполнения запланированной обработки будет болезненной и ненадежной. Если вы действительно не хотите иметь общую библиотеку Dal, то настройте веб-службу в своем веб-приложении, которая может быть вызвана запланированной задачей, которая объединяет пакеты и отправляет электронную почту.

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

...