2016-12-01 2 views
0

У меня есть требование в моем приложении MVC.Запланированная работа эквивалентная функциональность в MVC

У меня был экспорт в excel, который занимает 3 минуты (пользователь нажимает кнопку экспорта и ждет). Этот экспорт загружает excel с несколькими листами после применения определенных правил для данных. Эти правила являются datamanipulations плюс применение цветов на ячейках, принадлежащих определенным столбцам.

Чтобы избежать времени ожидания, меня попросили разработать код в приложении MVC, которое может работать как запланированное задание. Это задание должно экспортировать excel в выделенную папку в сети в запланированное время (ежедневно один раз). Также мне было предложено разработать веб-страницу в приложении, в которой есть ссылки для загрузки этих преимуществ.

Quesions здесь (Любая помощь будет оценена):

  1. Я выбрал Quartz.NET для реализации этого требования. Это открытый исходный код (к моим небольшим знаниям), который может предоставить возможность запланировать работу (класс, разработанный в .NET). Это правильный выбор или какие-либо последствия в будущем?

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

ответ

0

Я не очень хорошо знаком с Quartz.net, но я знаю, что пытается запустить фон/запланированные задачи из того же процесса, что и приложение MVC могут быть проблематичными.

Ссылка 1: http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx/

Ссылка 2: http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx

По сути, вы не можете гарантировать, что процесс завершится корректно при запуске его из-за того, как IIS обрабатывает приложения пулов (в котором вы процесс MVC работает: предполагается, что хостинг на IIS).

Вы указываете выполнение запланированной задачи в вашем приложении MVC. Опять же, это неверно. Почему вы не можете просто ударить проект консольного приложения в решение и вывести код из него, а затем поместить его на сервер и использовать планировщик задач Windows?

С точки зрения фоновых задач, «правильный» способ сделать это - отправить команду из вашего приложения MVC в какую-то очередь сообщений, которая затем может гарантировать, что команда не будет удалена. Я использовал RabbitMQ в прошлом (посредник сообщений промежуточного уровня). Возможно, это и есть цель Quartz.net.

В этой настройке обычно используется другое приложение (для меня обычно используется консольное приложение на сервере), которое получает командное сообщение из очереди сообщений и запускается в его собственном процессе, полностью отделенное от MVC, и, следовательно, проблемы, присущие IIS AppPools и фоновые задачи.

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

+0

Спасибо за ваш быстрый ответ. у вас есть действительная точка. Я буду исследовать больше на Quartz.Net. Я все еще сомневаюсь, что он выполняет запланированную задачу в том же процессе, что и MVC. Но ваш ответ определенно помогает. Еще раз спасибо –

+0

Я прошел через ваши ссылки. Ref2 рекомендовал кварц.NET как одно из решений. Спасибо за эти указатели! Это помогло. –