Скорее всего, вам нужно будет сделать следующее: -
- Создайте очередь, в которую вы можете поместить
задания для запуска
- Создать сервис
который обрабатывает эту очередь
- Может быть, сообщить о прогрессе от службы
вернуться на сайт приложения
- Может быть, сообщить о прогрессе обратно в
пользователь веб-приложения либо
при обновлении страницы или более динамически с использованием Ajax
Некоторые опции для каждого из этих компонентов: -
1) Параметры очереди заданий включают очередь очереди в памяти <>, очередь, хранящуюся в базе данных, MSMQ, удаленную очередь, например простую очередь сообщений Amazon. То, что вы выберете, будет зависеть от того, насколько отказоустойчивым будет ваше решение, хотите ли вы перезагрузить компьютер после сбоя и нужно ли распределять работу по нескольким серверам.
2) Варианты службы включают в себя поток внутри вашего веб-приложения или службы NT. Опять же, это будет зависеть от ваших потребностей в отказоустойчивости и перезапуске.
3) То, как вы будете сообщать о прогрессе, будет зависеть от того, какую очередь вы использовали. Для MSMQ у вас могут быть «коррелированные» сообщения, идущие в обратном направлении. Для очереди базы данных вы можете отметить прогресс в базе данных. Или вы можете вызывать веб-службу в веб-приложении, чтобы сообщить о прогрессе.
4) Если вы хотите, чтобы динамический индикатор выполнения (или тому подобное) отображался пользователю по мере выполнения задания, вы можете реализовать службу Ajax, которая передает информацию о ходе выполнения с сервера в браузер.
Для отправки сообщений электронной почты я бы рекомендовал использовать базу данных в качестве очереди, поскольку вы, вероятно, захотите отслеживать их в течение длительного периода времени и отмечать недоставленные сообщения электронной почты, сообщения электронной почты, которые были прочитаны, и тому подобное, например, в вашей базе данных.