Сбор данных SQL с обратной связью в веб-приложение asp.net - PullRequest
1 голос
/ 18 июня 2009

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

Ответы [ 2 ]

1 голос
/ 18 июня 2009

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

На стороне клиента используйте UpdatePanel и таймер для регулярного опроса сервера на предмет результатов. Когда результаты есть, отключите таймер.

0 голосов
/ 18 июня 2009

Я бы сделал что-то, как предлагает Andomar, но в службе Windows вместо потока в процессе asp.net.

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

Тогда я бы настроил приложение службы Windows, которое будет регулярно опрашивать эту таблицу. Может быть, как часто каждые 5-30 секунд в зависимости от вашей нагрузки. Служба была бы простой: если бы она нашла какие-либо новые задания, она пометила бы первое задание как «работающее», а затем запустила процесс сбора данных. Когда процесс будет завершен, служба помечает работу как выполненную.

Наконец, в моем приложении asp.net я бы настроил страницу заказа работ, где пользователь мог бы запросить новые задания по сбору данных. Запрос вставит новую запись в таблицу рабочей очереди с новым статусом и описанием работы по мере необходимости. Затем страница будет перенаправлять пользователя на новую страницу (или использовать ajax), которая будет проверять состояние работы и перезагружать каждые XX секунды, чтобы проверить, выполнена ли работа. Когда код состояния задания установлен как завершенный, мы отображаем страницу, на которой пользователь может отобразить отчет или загрузить файл или что-то еще.

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

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