. NET Исключения обработки Core Web API после того, как ответ уже отправлен - PullRequest
0 голосов
/ 10 июля 2020

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

//throw new Exception("This exception won't cause a crash");
_driver.startCalculation(arg1, arg2, (status) => {
    //throw new Exception("This exception will cause a crash");
    _repo.updateStatus(status);
});

К моменту выполнения кода в анонимной функции ответ уже был отправлен клиенту.

Если исключение происходит вне там клиент получает ответ 500 и сервер выживает. Однако внутри этого исключения будет sh весь процесс API.

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

1 Ответ

0 голосов
/ 10 июля 2020

Одна из идей - изменить вашу архитектуру на.

Request -> Server

(Server accepts the request with basic validation, but does not completely complete the workload).

Response <-  202 Response (NOT 200).

, а затем вы вернетесь позже и запросите завершенную работу.

Более подробно это описано в статье ниже.

// startQuote // Одно из решений этой проблемы - использовать HTTP-опрос. Опрос полезен для кода на стороне клиента, поскольку может быть сложно обеспечить конечные точки обратного вызова или использовать длительные соединения. Даже когда обратные вызовы возможны, требуемые дополнительные библиотеки и службы могут иногда создавать слишком большую сложность. // endQuote //

(от)

https://docs.microsoft.com/en-us/azure/architecture/patterns/async-request-reply

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