Для любого продолжительного процесса гораздо лучше сделать это за пределами IIS.
В этом случае у меня будет запущена обычная служба Windows, которая отслеживает очередь запросов.Когда приходит запрос на генерацию отчета, он затем запускает поток для выполнения генерации.
Веб-служба будет нести ответственность за 3 вещи.Во-первых, добавление элемента в очередь для обработки.Во-вторых, проверка состояния очереди на предмет готовности отчета.В-третьих, отправка заполненного отчета обратно вызывающему клиенту.
Это позволило бы клиенту по существу сделать пожар и забыть о запросе на отчет и перезвонить позже, чтобы проверить его состояние.Кроме того, это будет означать, что если IIS переработан по какой-либо причине, вы все еще в порядке.
Для бонусных баллов я бы добавил код обработки ошибок, который при перезапуске службы Windows мог перезапускать задания отчетов, находившиеся в середине выполнения.Это сделало бы его более надежным и позволило бы перезагрузить сервер в любой момент.