#c# #rest #asp.net-core
#c# #rest #asp.net-core
Вопрос:
На стороне клиента: клиент отправляет POST-запрос в веб-API REST с использованием HTTPCLIENT на URL "Http://localhost:44344/api/sale"
-адрес с телом JSON:
{
"CashierID":"002",
"AdditionalInfo":
[
{
"amount":"11",
"sessionID":"2",
}
]
}
На стороне сервера:
После получения запроса сервер немедленно возвращает результат с идентификатором для идентификации операции, пересылает запрос на другой сервер и ожидает ответа . Всякий раз, когда результат доступен, сервер повторно отправляет ответ с результатом и идентификатором тому же клиенту.
{
"Result": {
"ErrorCode": "",
"OperationID": 1,
"Status": null,
"responseCode": null
}
}
Как я знаю в .NET Core, метод может возвращать только один ответ, я провожу некоторые поиски, я обнаружил, что система очередей может это сделать, но только при выполнении нескольких запросов, а не ответов.
как я могу реализовать такой подход к ответу?
Спасибо
Комментарии:
1. Вы не можете сделать это с помощью HTTP, это противоречило бы модели связи HTTP. Если сервер отправляет ответ, этот запрос / ответ завершен, вам нужен новый. Не похоже, что HTTP — это то, что вам нужно для этого — подсказка, связь между сервером и клиентом обычно осуществляется с помощью таких технологий, как websockets.
2. Это просто невозможно с HTTP. Вы не можете отправить несколько ответов на один и тот же запрос. Варианты: 1) дождитесь ответа 2-го сервера, прежде чем предоставлять ответ от вашего API. 2) Используйте websockets вместо HTTP, чтобы обеспечить поток обновлений в реальном времени, инициируемых клиентом или сервером. (в мире .NET это обычно делается с помощью SignalR, кстати.) 3) Найдите какой-нибудь другой асинхронный способ уведомить пользователя, когда ответ возвращается с другого сервера (например, электронная почта, SMS, push-уведомление).
3. @CamiloTerevinto спасибо за ваш ответ, как насчет того, чтобы клиент сделал запрос на опрос и получил второй ответ? проблема в том, как сохранить ответ перед запуском объединения, я подумал и об этом решении, но я не знаю, как я могу это сделать
4. @ADyson спасибо, 1) получение ответа занимает много времени, потому что мне нужен такой подход. 2) мне нужно использовать связь rest. 3) как что?
5. @ADyson я согласен с вами, я должен объяснить им, что это не очень хорошее решение, и я постараюсь найти хорошее решение. я знаю, что у опроса также есть свои недостатки, поэтому мне нужно найти другое решение. в любом случае спасибо