kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 Alex
Alex
Вопрос

Фоновая обработка на основе очередей в веб-приложении ASP.NET MVC

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

В качестве примера можно привести систему награждения бейджами StackOverflow'. Обычно вы можете совершить определенное действие, которое наградит вас бейджем, но само награждение происходит позже (обычно от 10 минут до пары часов). Я предполагаю, что это делается через отдельный фоновый процесс, так как для работы SO' не критично, чтобы бейджи присуждались сразу после их получения.

Итак, я пытаюсь создать некую систему очередей, в которую я мог бы запихивать задачи (скажем, что-либо, реализующее интерфейс ITask, у которого будет метод Process()), которые в конечном итоге будут выполняться отдельным процессом.

Как мне реализовать такую систему? Идеи/подсказки/пример кода?

Спасибо!

27 2009-08-23T02:57:22+00:00 3
 animuson
animuson
Редактировал вопрос 8-го марта 2015 в 4:37
Программирование
asp.net-mvc
c#
Решение / Ответ
Noon Silk
Noon Silk
23-го августа 2009 в 3:35
2009-08-23T03:35:26+00:00
Дополнительно
Источник
Редактировать
#9399667

Службы Windows и MSMQ для взаимодействия с ними (если это вообще нужно).

-- Редактировать

Чтобы немного расширить.

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

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

Поэтому для этого вы будете использовать MSMQ Private Queue (пространство имен System.Messaging). Одна из главных особенностей MSMQ заключается в том, что сообщения должны быть размером <4 мегабайта. Поэтому, если вы собираетесь отправлять большие графы объектов, сначала сериализуйте их в файл и просто отправьте имя файла.

MSMQ довольно красив. Вы можете отправлять на основе 'ID корреляции', если вам это нужно, но, по какой-то забавной причине, ID корреляции должен быть в форме:

{guid}\1

Все остальное не работает (по крайней мере, в версии 2.0 фреймворка, код мог измениться).

-- Редактировать

Пример, как просили:

using System.Messaging;

...

MessageQueue queue = new MessageQueue(".\\Private$\\yourqueue");
queue.Formatter = new BinaryMessageFormatter();

Message m = new Message();
m.Body = "your serialisable object or just plain string";

queue.Send(m);

// on the other side

MessageQueue queue = new MessageQueue(".\\Private$\\yourqueue");
queue.Formatter = new BinaryMessageFormatter();

Message m = queue.Receive();

string s = m.Body as string;

// s contains that string now
Noon Silk
Noon Silk
Редактировал ответ 23-го августа 2009 в 5:02
20
0
 Adrian
Adrian
1-го февраля 2011 в 6:31
2011-02-01T06:31:23+00:00
Дополнительно
Источник
Редактировать
#9399668

У Джеффа есть отличный пост, показывающий, как он добился этого первоначально для Stack Overflow по адресу http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/.

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

11
0
 Dhanuka777
Dhanuka777
9-го января 2015 в 4:03
2015-01-09T16:03:05+00:00
Дополнительно
Источник
Редактировать
#9399669

Только что нашел этот вопрос при поиске фонового процесса в ASP.NET MVC. (Доступно после .NET 4.5.2)

public ActionResult InitiateLongRunningProcess(Emails emails)
{
    if (ModelState.IsValid)
    {
       HostingEnvironment.QueueBackgroundWorkItem(ct => LongRunningProcessAsync(emails.Email));
       return RedirectToAction("Index", "Home");
    }

    return View(user);
}

Примечание: Лично я'не буду использовать веб-сервер для запуска фоновых задач. Также не стоит изобретать велосипед, я бы настоятельно рекомендовал использовать Hangfire.

Прочитайте эту замечательную статью от Hanselman HowToRunBackgroundTasksInASPNET.

 Dhanuka777
Dhanuka777
Редактировал ответ 24-го марта 2017 в 5:59
5
0
Похожие сообщества 16
DotNetRuChat
DotNetRuChat
6 652 пользователей
Чат русскоязычного .NET сообщества http://dotnet.ru/ Правила: https://t.me/DotNetRuChat/704399 Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @AvaloniaRU, @xamarin_russia, @DotNetRuJobs, @uwp_ru Флуд в @dotnettalks
Открыть telegram
Вакансии .NET
Вакансии .NET
3 530 пользователей
Правила: https://t.me/DotNetRuJobs/123 Канал с вакансиями - https://t.me/DotNetRuJobsFeed Вам могут быть интересны: @dotnetruchat, @cilchat, @fsharp_chat, @pro_net, @AvaloniaRU, @xamarin_russia Флуд в @dotnettalks
Открыть telegram
Microsoft Stack Jobs
Microsoft Stack Jobs
2 414 пользователей
Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks
Открыть telegram
С#
С#
2 330 пользователей
Стараемся не флудить. Пишем по делу. Правила: https://t.me/professorweb/430450 Для флуда @svoboda_obsh
Открыть telegram
pro.net
pro.net
1 820 пользователей
Обсуждение .NET и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). https://t.me/pro_net/34653 Флудилка: @dotnettalks
Открыть telegram
CODE BLOG / C#
CODE BLOG / C#
1 772 пользователей
Чат для .NET разработчиков и C# программистов. По всем вопросам: @shwanoff Youtube-канал: https://youtube.com/codeblog Основной канал: @codeblog Вконтакте: https://vk.com/codeblog Правила: https://t.me/codeblog_csharp/246972 Вакансии по тегу #work
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 6 дней назад
2
Денис Васьков
Зарегистрирован 1 неделю назад
3
Dima Patrushev
Зарегистрирован 1 неделю назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией