Подход для REST запрашивает с долгим временем выполнения?

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

8
задан Marcus Leon 26 October 2009 в 20:11
поделиться

3 ответа

Предполагая, что вы можете настроить тайм-ауты HTTP, используя любую выбранную вами структуру, тогда вы можете запросить через GET и просто зависнуть на 5 минут.

Однако может оказаться более гибким инициировать выполнение с помощью POST, получить квитанцию ​​(номер / идентификатор, что угодно), а затем выполнить GET, используя эти 5 минут спустя (и, возможно, повторить попытку, учитывая, что ваша процедура не займет ровно 5 минут каждый раз). Если запрос все еще выполняется, верните соответствующий код ошибки HTTP (возможно, 404, но что бы вы вернули для GET с несуществующей квитанцией?) Или верните результаты, если они доступны.

5
ответ дан 5 December 2019 в 05:34
поделиться

Если вы контролируете оба конца , то вы можете делать все, что захотите. Например, браузеры, как правило, запускают HTTP-запросы с заголовками «закрытие соединения», поэтому у вас остается меньше вариантов; -)

Имейте в виду, что если у вас есть несколько NAT / брандмауэров между ними, у вас может быть несколько разорванных соединений, если они неактивен в течение некоторого времени.

Могу я предложить зарегистрировать процедуру "обратного вызова"? Клиент отправляет серверу запрос с «конечной точкой обратного вызова», получает «билет». Как только сервер завершает работу, он "выполняет обратный вызов" клиента ... или клиент может проверить статус запроса по идентификатору билета.

4
ответ дан 5 December 2019 в 05:34
поделиться

Это один из подходов.

Создайте новый запрос для выполнения ProcessXYZ

POST /ProcessXYZRequests

201-Created
Location: /ProcessXYZRequest/987

Если вы хотите увидеть текущий статус запроса:

GET /ProcessXYZRequest/987

<ProcessXYZRequest Id="987">
  <Status>In progress</Status>
  <Cancel method="DELETE" href="/ProcessXYZRequest/987"/>
</ProcessXYZRequest>

когда запрос будет завершен, вы должны см. что-то вроде

GET /ProcessXYZRequest/987

<ProcessXYZRequest>
  <Status>Completed</Status>
  <Results href="/ProcessXYZRequest/Results"/>
</ProcessXYZRequest>

Используя этот подход, вы легко можете представить, что дадут следующие запросы

GET  /ProcessXYZRequests/Pending
GET  /ProcessXYZRequests/Completed
GET  /ProcessXYZRequests/Failed
GET  /ProcessXYZRequests/Today
14
ответ дан 5 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: