#c# #asp.net #asp.net-web-api2
#c# #asp.net #asp.net-web-api2
Вопрос:
прежде всего, я прошу прощения за мой плохой заголовок вопроса, но я не могу придумать ничего лучше прямо сейчас.
То, что я хочу сделать, кажется довольно простым. Я хочу, чтобы мой API возвращал, например, простую строку каждую секунду примерно 10 раз.
Есть ли какой-либо способ достичь этого с ASP.NET ?
И да, очевидно, что фактический вариант использования отличается. Мой API очищает некоторые данные и возвращает их после этого. Проблема в том, что очистка занимает около 70 секунд. Я бы хотел, чтобы он возвращал данные в меньших пакетах, чтобы мое приложение могло начать обработку данных раньше.
Но способ достижения этого — если таковой существует — должен быть тем же самым. По крайней мере, я так об этом думаю.
Спасибо за любую помощь.
Комментарии:
1. Думайте в терминах HTTP. Вы ожидаете, что данные ответа будут передаваться в потоковом режиме для одного HTTP-запроса, или вы ожидаете, что ваш первый ответ завершится быстро, а затем клиент отправит другой запрос и т.д.? Можете ли вы вместо этого использовать веб-сокеты?
2. Хотя вы могли бы поддерживать выполнение запроса в течение более длительного периода и отправлять ответ порциями, ASP.NET API на самом деле не создан для этого варианта использования. Возможно, было бы лучше инициировать очистку через вызов API и использовать SignalR для отправки обновлений клиенту или даже вообще инициировать очистку через SignalR.
3. @JonSkeet Я хотел бы выполнить только один запрос. Я хотел бы, чтобы мой клиент был как можно более «тупым»…
4. @huysentruitw Не мог бы ты быть таким королем, чтобы объяснить это немного подробнее? Это кажется интересным…
5. Я подозреваю, что по-настоящему «тупой» клиент даже не захочет начинать обработку ответа, пока он не будет завершен. Хотя это может быть осуществимо, вы должны ожидать, что это будет неудобно — и что прокси-серверы могут легко испортить вам ситуацию, например, добавив буферизацию.
Ответ №1:
Это невозможно с http.
Вы должны создать длительный пул на стороне клиента или вы можете создать сокет-соединение между клиентом и сервером. Пакет signalr
— отличный выбор.