Mam kilka działań narzędziowych, które zwracają tekst wynik za pośrednictwem return Content("my text","text/plain")
.Strumieniowe przesyłanie tekstu dla długotrwałej akcji?
Czasami uruchomienie tych metod zajmuje kilka minut (np. Przetwarzanie protokołów, konserwacja bazy danych).
Chciałbym zmodyfikować moją metodę działania, aby zamiast zwracać wszystkie dane wyjściowe na raz, tekst był przesyłany strumieniowo do klienta, gdy jest gotowy.
Oto zmyślony przykład:
public ActionResult SlowText()
{
var sb = new System.Text.StringBuilder();
sb.AppendLine("This happens quickly...");
sb.AppendLine("Starting a slow 10 second process...");
System.Threading.Thread.Sleep(10000);
sb.AppendLine("All done with 10 second process!");
return Content(sb.ToString(), "text/plain");
}
Jak napisano, to działanie powróci trzy linie tekstu po 10 sekundach. To, czego chcę, to sposób na utrzymanie strumienia odpowiedzi otwartego i natychmiastowe zwrócenie pierwszych dwóch linii, a następnie trzeciego wiersza po 10 sekundach.
Pamiętam, że robiłem to ponad 10 lat temu w klasycznej wersji ASP 3.0 za pomocą obiektu Response. Czy istnieje oficjalny, przyjazny MVC sposób, aby to osiągnąć?
-
Aktualizacja: Razor .cshtml korzystania w aplikacji; ale nie używając żadnych widoków (tylko ContentResult
) dla tych działań.
Brzytwa czy aspx? Różnica polega na tym, że silnik Razor nie pozwala na przesyłanie strumieniowe. – Buildstarted
uruchamiamy ten sam problem, a także bezpośrednio wykorzystaliśmy Response.OutputStream w kontrolerze. Jestem ciekaw, czy znajdziesz jakieś rozwiązania? –