Я бы сделал что-то, как предлагает Andomar, но в службе Windows вместо потока в процессе asp.net.
Сначала я бы настроил таблицу в моей базе данных, которая будет использоваться в качестве рабочей очереди - может быть, вашей таблицы результатов будет достаточно? Эта таблица будет содержать уникальный идентификатор задания, описание задания (используется вашей службой для определения того, что делать) и код состояния задания (новое, рабочее, законченное).
Тогда я бы настроил приложение службы Windows, которое будет регулярно опрашивать эту таблицу. Может быть, как часто каждые 5-30 секунд в зависимости от вашей нагрузки. Служба была бы простой: если бы она нашла какие-либо новые задания, она пометила бы первое задание как «работающее», а затем запустила процесс сбора данных. Когда процесс будет завершен, служба помечает работу как выполненную.
Наконец, в моем приложении asp.net я бы настроил страницу заказа работ, где пользователь мог бы запросить новые задания по сбору данных. Запрос вставит новую запись в таблицу рабочей очереди с новым статусом и описанием работы по мере необходимости. Затем страница будет перенаправлять пользователя на новую страницу (или использовать ajax), которая будет проверять состояние работы и перезагружать каждые XX секунды, чтобы проверить, выполнена ли работа. Когда код состояния задания установлен как завершенный, мы отображаем страницу, на которой пользователь может отобразить отчет или загрузить файл или что-то еще.
Здесь я предлагаю простую реализацию очереди заданий на основе опроса. Конечно, вы можете сделать более интересную версию, используя MSMQ или что-то подобное, но этого должно быть достаточно для многих, если не для большинства ситуаций.