ASP.NET MVC3 веб и фоновые процессы - PullRequest
2 голосов
/ 17 октября 2011

У меня есть веб-проект, написанный на ASP.NET MVC3. Часть моего веб-приложения используется для сохранения изображений и работает довольно медленно. Таким образом, после попытки сохранить 100 изображений (с ними тоже выполняется какая-то другая работа) все идет медленно, и пользователю приходится ждать в браузере много.

Я думал о создании фоновой службы (процесса), в которую я отправляю некоторые данные, и они будут работать в фоновом режиме, не замедляя использование веб-сайта. Чтобы быть конкретным, мне нужен сервис, который работает с одной строкой строк. Веб-приложение может отправить новую строку в очередь в любое время, и служба должна выполнить некоторую работу со строками в очереди.

Понятия не имею, с чего начать и что использовать. Какие-либо предложения? :)

Ответы [ 4 ]

2 голосов
/ 18 октября 2011

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

1 голос
/ 18 октября 2011

Любая форма очереди будет работать здесь.Проверьте RabbitMQ или MSMQ.По сути, все, что вам нужно, это где-то хранить сообщение, над которым вы хотите, чтобы что-то еще работало.

Вы можете использовать BackgroundWorker или что-то еще - сделайте его статическим и создайте его в Application_Start в global.asax.Хотя я думаю, что вам лучше иметь какой-то механизм, который не будет разрушен при перезапуске веб-сайта или чем-то подобном.

Другой вариант - просто поместить значение в БД, тогда вы можете легкоотслеживать статус и отзывы о нем.

1 голос
/ 18 октября 2011

Существует несколько разных способов создания чего-то подобного.

Одним из способов может быть размещение службы WCF в службе Windows, которая управляет фоновыми заданиями и имеет интерфейс службы с такими методами:

Guid StartJob(...) //returns new jobId<br/>
SomeInfoObject CheckJobStatus(Guid jobId)

Это позволило бы вашему веб-приложению опрашивать ... используя Ajax, вы могли бы отображать для пользователя индикатор выполнения, если вы так склонны (клиент будет отправлять запросы Ajax вашему веб-приложению, чтовключите службу для получения информации о прогрессе).

Другим способом будет запись информации о задаче в базу данных для планирования новых заданий.Служба Windows (или даже запланированная задача, которая запускает процесс) может использоваться для выполнения заданий и обновления базы данных по мере выполнения заданий.

0 голосов
/ 18 октября 2011

Почему бы не рассмотреть асинхронную обработку запросов, прежде чем переходить к пользовательскому фоновому сервису.

В MVC 3 вы можете довольно легко построить Asynchrouns Controller, реализовав AsyncController. Иногда, если у нас нет четкого видения того, как действовать и сталкиваться с бесчисленным выбором, повторное использование вкусностей из CLR является лучшим выбором. Асинхронный контроллер использует пул рабочих потоков IIS, преобразуя все тяжелые долгосрочные задачи в фоновые рабочие потоки, освобождая другие потоки и, следовательно, устраняя проблемы с производительностью, которые у вас возникают. С точки зрения кодирования это не так громоздко.

Например, вы можете проверить эту ссылку:

Использование асинхронного контроллера в ASP.NET MVC

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

...