Создание неблокирующего процесса в приложении MVC 2 - PullRequest
3 голосов
/ 04 сентября 2010

Я сталкиваюсь с настройкой системы, которая позволит пользователям:

  1. Нажмите кнопку, чтобы инициализировать команду «download & archive», которая считывает списки файлов через XML, перетаскивает файлы по HTTP в локальный каталог, архивирует их и сохраняет их для загрузки.
  2. Получить индикатор выполнения / индикатор, сообщающий им, что их «запрос обрабатывается» сразу после нажатия вышеупомянутой кнопки.
  3. Иметь возможность отправить еще одну команду "загрузить и архивировать", не дожидаясь завершения предыдущего запроса (запросов).
  4. После выполнения каждой команды "загрузить и архивировать" пул завершенных архивов должен увеличиться на единицу с новым архивом, доступным для загрузки.

Как мне следить за текущим процессом, который происходит на шаге 1, и как должны быть переданы надлежащие события / сообщения обратно в пользовательский интерфейс, как это требуется для шагов 2 и 4?

Как пользовательский интерфейс узнает о текущих процессах? Волшебные папки и токены в файловой системе? Состояние сеанса? База данных, которая записывается процессом и считывается из кода интерфейса?

Мне было интересно, встречается ли это часто и имеет "стандартный способ" реализации?

К вашему сведению, мой стек:

  • ASP.NET MVC 2 в .NET 4
  • IIS 7
  • Внешняя библиотека 7zip для .NET

1 Ответ

2 голосов
/ 04 сентября 2010

На клиенте, который в вашем случае является контроллером MVC, создайте явный объект Command, который имеет идентификатор (скорее всего, GUID).Затем отправьте одностороннее сообщение, создав новый поток или через ServiceBus для вашего внутреннего процесса, и верните идентификатор команд обратно в представление.

Пока ваш серверный процесс работает, ваш View может опросить (используя JavaScript) наличие URI.например, http://www.mysite.com/asyncresults/GUID.js

Тогда ваш бэкэнд-процесс может создать GUID.js в файловой системе с объектами JSON, которые предоставляют вам достаточно информации для визуализации обновлений прогресса.

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

Это решение является масштабируемым и простым в реализации.

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