Asp.net MVC длительной эксплуатации - PullRequest
0 голосов
/ 23 марта 2010

Мне нужно создать список рассылки, отправляющий много писем. Что такое лучшее решение в MVC, чтобы вызвать длительную операцию? лучше с примером

Ответы [ 4 ]

2 голосов
/ 23 марта 2010

Вы не хотите запускать такие длинные процессы на своем веб-сервере. Вы хотите, чтобы приложение "backoffice" обрабатывало отправку электронных писем и ответов. Напишите другое приложение, которое работает на другом компьютере. Пусть он прочитает необходимую информацию из базы данных и отправит электронные письма. Если вы отправляете электронные письма, вам также необходимо обработать ответы. Это приложение backoffice должно обрабатывать оба.

1 голос
/ 23 марта 2010

Скорее всего, вам нужно будет сделать следующее: -

  1. Создайте очередь, в которую вы можете поместить задания для запуска
  2. Создать сервис который обрабатывает эту очередь
  3. Может быть, сообщить о прогрессе от службы вернуться на сайт приложения
  4. Может быть, сообщить о прогрессе обратно в пользователь веб-приложения либо при обновлении страницы или более динамически с использованием Ajax

Некоторые опции для каждого из этих компонентов: -

1) Параметры очереди заданий включают очередь очереди в памяти <>, очередь, хранящуюся в базе данных, MSMQ, удаленную очередь, например простую очередь сообщений Amazon. То, что вы выберете, будет зависеть от того, насколько отказоустойчивым будет ваше решение, хотите ли вы перезагрузить компьютер после сбоя и нужно ли распределять работу по нескольким серверам.

2) Варианты службы включают в себя поток внутри вашего веб-приложения или службы NT. Опять же, это будет зависеть от ваших потребностей в отказоустойчивости и перезапуске.

3) То, как вы будете сообщать о прогрессе, будет зависеть от того, какую очередь вы использовали. Для MSMQ у вас могут быть «коррелированные» сообщения, идущие в обратном направлении. Для очереди базы данных вы можете отметить прогресс в базе данных. Или вы можете вызывать веб-службу в веб-приложении, чтобы сообщить о прогрессе.

4) Если вы хотите, чтобы динамический индикатор выполнения (или тому подобное) отображался пользователю по мере выполнения задания, вы можете реализовать службу Ajax, которая передает информацию о ходе выполнения с сервера в браузер.

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

0 голосов
/ 23 марта 2010

Я бы посоветовал вам сохранить сообщения, которые вы хотите отправить в БД, например, вместе с получателями. Затем вы можете использовать планировщик (например, Quartz.NEt ), который каждую минуту (например) проверяет, есть ли сообщения для отправки, и, если они есть, отправляет до 10 сообщений каждый раз.

0 голосов
/ 23 марта 2010

Если вы можете использовать ASP.NET MVC2, я бы использовал новый Асинхронный контроллер

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