Как запустить фоновый код в приложении asp.net-mvc / wcf - PullRequest
2 голосов
/ 15 марта 2011

Исходя из этого ответа здесь , мне нужно поместить электронные письма в очередь, запустить фоновую задачу и отправить их. Как мне сделать это с архитектурой ASP.NET-MVC и WCF?

  1. Как построить очередь (сервер sql)?
  2. Как мне создать фоновое задание?

Ответы [ 2 ]

0 голосов
/ 15 марта 2011

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

  1. Очередь сообщений через службу WCF с использованием привязки MSMQ через эту серию публикаций в блоге, в которой предполагается, что IIS 7: MSMQ, WCF и IIS. Очередь сообщений в MSMQ. MSMQ - это хорошая (иногда недостаточно используемая) служба очереди, встроенная в Windows. Вы напишете службу Windows для получения сообщений из этой очереди. Если у вас IIS 7, проверьте Смерть службам Windows, Long Live AppFabric . MSMQ очень прост, но имеет некоторые причудливые ограничения (размер и доступность сообщений 4 МБ)
  2. Очередь сообщений в очередь SQL. Создайте таблицу для хранения основной информации о сообщениях в очереди, а затем сохраните процедуры для переноса семантики очереди (например, вы не хотите, чтобы несколько потребителей получали одно и то же сообщение). Не сложно, но немного времени, чтобы получить права.
  3. Поставить в очередь сообщения в Service Broker (или даже в MSMQ) и написать службу Windows, которая получает сообщения из очереди Service Broker. Service Broker обрабатывает семантику очереди (конкурирующие потребители) для вас. Недостатком является то, что его боль в заднице для администрирования.

НТН,

Z

0 голосов
/ 15 марта 2011

Я думаю, что ваше решение не зависит от того, используете ли вы MVC.

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

Еще один способ сделать это - использовать MSMQ в качестве носителя данных. В общем случае MSMQ не следует использовать для «хранения» данных, а только в качестве механизма передачи сообщений, но в этом случае это, безусловно, вариант.

С точки зрения разработки «очереди», если электронная почта по какой-то причине требует заказанной доставки, просто наличие столбца «RequestedDTTM» в таблице базы данных позволит вам отправлять их в том порядке, в котором они были запрошены.

Наконец, я хотел бы рассмотреть возможность реализации простого многопоточного отправителя электронной почты, чтобы максимизировать производительность. Использование TPL в .NET 4.0 сделает это довольно легко. В качестве альтернативы вы можете использовать что-то вроде библиотеки SmartThreadPool (доступно на codeplex.com) для управления потоками отправителя электронной почты.

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

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