ASP.NET MVC: выполнение медленной операции на сервере и получение ее состояния

#asp.net-mvc #asynchronous #task

#asp.net-mvc #асинхронный #задача

Вопрос:

Я разрабатываю веб-приложение на основе ASP.NET MVC.

Имеется большая база данных. Пользователи могут выполнять поиск в этой базе данных, используя пользовательские фильтры (html-форма с опциями). После того, как пользователи отправят форму и дождутся результата. Это очень медленная операция. Но это не вопрос оптимизации базы данных или запросов.

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

Я вижу это как:

  1. Отправка первого ajax-запроса (данных формы) для запуска этой медленной операции.
  2. Время от времени отправка ajax-запросов для получения информации об операции.

Вопросы: 1. Как я могу запустить операцию на сервере, которая будет обрабатываться вне http-запроса? 2. Как я могу получить состояние этой операции?

Ответ №1:

Как я могу запустить операцию на сервере, которая будет обрабатываться вне http-запроса

Вы могли бы запустить ее в фоновом потоке. Либо создайте ее вручную, либо, если вы используете .NET 4.0, используйте TPL.

Как я могу получить состояние этой операции?

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