2013-05-26 5 views
2

Я работаю над более крупным веб-сайтом, и я хотел бы сделать «длинные» части программы, выполняемые на отдельной ветке. Но я как бы разорван на то, как это произошло, и хотя я бы спросил, разрешил ли кто-то подобную проблему. Причина, по которой я хотел бы это сделать, заключается в том, что, среди прочего, я отправляю электронные письма пользователям и там довольно много запросов к базам данных перед отправкой электронной почты, не нужно было бы блокировать пользователя, пока все это происходит. Есть также другие случаи, когда я хотел бы подождать некоторое время, чтобы отправить электронное письмо, в случае отправки большего количества писем, а затем объединить их.Связь между ASP.NET MVC и обратным процессом

Я думал 2 способа сделать это:

  1. есть поток работает, который запускается в состоянии приложения, что затем запустит обработку серверной. Это позволит мне отправить объектов непосредственно в поток.
  2. Есть ли программа, работающая сбоку, и отправлять данные к ней через таблицу в моей базе данных.
+0

асинхр ........? – Shyju

ответ

2

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

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

Используйте базу данных для хранения информации о выполнении фоновой работы, но не используйте таблицу базы данных как «очередь работы». Используйте соответствующую очередь для этого:

  • Amazon SQS
  • Azure Message Bus
  • RabbitMQ

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

См:

1

Я рекомендую сохранить «работу» в db, а затем выполнить работу или работу, которая подхватывает работу и делает это. Это лучше с точки зрения безопасности, и вы не сталкиваетесь с проблемами при попытке выполнять длительные задачи в рабочих потоках IIS.

What are some best practices for managing background threads in IIS?

+0

Да, это я тоже: D – Androme

Смежные вопросы