Как создать отдельный сервис помимо основного приложения в asp.net - PullRequest
1 голос
/ 29 октября 2011

У меня есть основное приложение в asp.net.Там у меня есть возможность отправлять почту через SMTP.Я хочу сделать отдельный процесс отправки почты.Это означает, что если я нажму кнопку «ОТПРАВИТЬ ПОЧТУ», письмо будет отправлено из фона, не затрагивая приложение (например, отдельная служба ).Я попытался использовать отдельный поток и он работает нормально, но есть ли возможность сделать отдельный процесс отправки почты, не затрагивая основное приложение.Если я закрою приложение (пул приложений), то оно также должно отправить письмо.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 29 октября 2011

Реализуйте логику отправки почты в качестве службы Windows и используйте IPC (например, разделяемую память через Mutex и MemoryMappedFile) для связи между вашим приложением ASP.NET и службой Windows.

Это дает то преимущество, чтоЛогика отправки почты работает до тех пор, пока машина работает ... если вам нужно постоянство (например, для запоминания неотправленных сообщений после перезагрузки), вы можете использовать БД или файловую систему ...

РЕДАКТИРОВАТЬ- гораздо более простой вариант:

Настройте папку раскладки SMTP в IIS (в нее встроена эта опция!) и соответственно настройте приложение ASP.NET (см., например, http://www.singular.co.nz/blog/archive/2007/11/28/using-an-smtp-pickup-directory-delivery-method-for-asp-net-development.aspx иhttp://www.singular.co.nz/blog/archive/2007/12/19/programmatically-setting-the-smtpclient-pickup-directory-location-at-runtime.aspx).

Таким образом, ваше приложение сохраняет сообщения в виде .eml файлов в каталоге, а IIS позаботится об остальном (отправка / повторная отправка / ведение журнала и т. Д.). SmtpClient имеетвозможность работы с папкой раскладки уже встроена!

1 голос
/ 29 октября 2011

Да, вы можете создать службу Windows.
Просто щелкните правой кнопкой мыши свое решение в обозревателе решений и выберите новый проект.
В диалоговом окне выберите «Visual c # -> Windows-> Windows service»

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

Редактировать 2
Как в качестве примечания об услугах. Они не так просты для отладки, как обычные приложения, так как их нельзя запустить из Visual Studio. Я обычно создаю реальные функции службы Windows как библиотеки классов. Затем я создаю два проекта. Сначала сервис, который использует библиотеку классов, которую я использую в финальном тестировании. Затем я создаю консольное приложение, которое использует ту же библиотеку, что и для разработки и отладки. Таким образом, я могу легко создавать и тестировать свой сервис без необходимости устанавливать сервис и подключать отладчик каждый раз, когда я хочу запустить его в отладчике.

...