C# Обновления HttpPost Progress до Angular 6 - PullRequest
0 голосов
/ 03 марта 2020

В моем приложении Angular 6 есть индикатор выполнения, который должен отображать прогресс рендеринга и загрузки PDF-файла в процентах. Вызов My Post выглядит следующим образом:

renderReport(renderObjectId: number): Observable<HttpEvent<Blob>> {
    return this.httpService.post('/render/report/' + renderObjectId, {
        observe: 'events',
        responseType: 'blob'
    });
}

Соответствующий метод в серверной части выглядит следующим образом:

[HttpPost]
[Route("report/{renderReportId}")]
[ResponseType(typeof(HttpResponseMessage))]
public HttpResponseMessage PrintReport(int renderReportId)
{
    var man = new RenderingManager();
    MemoryStream pdfFileStream = man.RenderReport(renderReportId);
    return CreatePdfDownload(pdfFileStream);
}

Метод RenderReport() занимает некоторое время, поскольку записано xml , подтверждено et c. Чего я хочу добиться, так это того, что во внешнем интерфейсе я могу подписаться на результат renderReport(renderObjectId: number) и получать несколько обновлений от внутреннего интерфейса, например: «в настоящее время выполняется в шаге 5 из 12 в RenderReport ()».

Is что как-то возможно? Может быть, вручную возвращать самоопределенный статус после каждого метода, вызванного в RenderReport?

1 Ответ

0 голосов
/ 03 марта 2020

Возможно, вы захотите выполнить свою трудоемкую операцию асинхронно при вызове вашего API и сразу же вернуть Принятый (202) код состояния с заголовком Location , где вы можете непрерывно опрашивать получить статус задачи до ее завершения, используя уникальный идентификатор, сохраняемый в памяти. Как только задача завершена, вы должны удалить этот идентификатор, чтобы отметить завершение задачи.

FYI - https://farazdagi.com/2014/rest-and-long-running-jobs

http://restalk-patterns.org/long-running-operation-polling.html

Таким образом, вы не будете ждать результата, пока операция не будет завершена, но будете постоянно запрашивать обновления.

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