Potrzebuję zwiększyć czas oczekiwania żądania dla określonej akcji kontrolera w mojej aplikacji programowo w kontrolerze.Jak ustawić limit czasu żądania dla jednego działania kontrolera na IIS i IIS Express
Odpowiedz
Najlepszym sposobem znalazłem tak daleko, aby obsłużyć długi skrypt uruchomiony (jeśli aplikacja po prostu nie można uniknąć jeden) jest przede wszystkim stworzenie obsługi asynchronicznej:
public async Task<IActionResult> About()
{
var cts = new CancellationTokenSource();
cts.CancelAfter(180000);
await Task.Delay(150000, cts.Token);
return View();
}
W powyższym fragmencie I dodałem token anulowania, aby powiedzieć, że moja metoda asynchroniczna powinna zostać anulowana po 180 sekundach (mimo że w tym przykładzie nigdy nie zwleka dłużej niż 150 sekund) dodałem limit czasu, aby upewnić się, że istnieje ograniczenie dotyczące tego, jak długo mój skrypt może biegać.
Jeśli uruchomisz ten program, otrzymasz błąd HTTP 502.3, ponieważ ustawiono limit czasu na httpPlatform z 00:02:00.
Aby wydłużyć ten limit czasu, przejdź do pliku web.config wewnątrz folderu wwwroot i dodaj właściwość requestTimeout = "00:05:00" do elementu httpPlatform. Na przykład:
<httpPlatform requestTimeout="00:05:00" processPath="%DNX_PATH%" arguments="%DNX_ARGS%" stdoutLogEnabled="false" startupTimeLimit="3600"/>
Długotrwały skrypt powinien teraz działać.
Oznacza to jednak, że każde żądanie potrwa 5 minut, aby upłynąć limit czasu, więc będziesz musiał upewnić się, że używasz sztuczki CancellationToken w celu ograniczenia żądań asynchronicznych, które masz w swojej aplikacji. W poprzednich wersjach MVC mieliśmy atrybut AsyncTimeOut, który można dodać do kontrolera, ale wygląda na to, że został on przecięty w MVC6 See GitHub aspnet/mvc Issue #2044
- 1. Zmień limit czasu sesji w IIS Express?
- 2. Limit czasu .NET i IIS dla indywidualnego żądania AJAX
- 3. Jak ustawić limit czasu żądania dla jednego działania kontrolera w aplikacji mvc asp.net
- 4. Limit czasu żądania IIS podczas długiej operacji ASP.NET
- 5. Jak uruchomić IIS Express?
- 6. Limit czasu sesji IIS vs Limit czasu sesji ASP.NET
- 7. Odpowiedź GZip na IIS Express
- 8. Jak oznaczyć (ustawić tytuł) dla procesu IIS Express?
- 9. wyłączyć IIS Express?
- 10. Jak uruchomić IIS 7.5 Express?
- 11. Jak wykrywać wersję IIS Express?
- 12. IIS Express lub Cassini
- 13. Aplikacja sieci web istnieje zarówno na lokalnym serwerze internetowym IIS, jak i na serwerze IIS Express
- 14. Na jakie konto działa usługa IIS Express?
- 15. Gdzie mogę znaleźć appcmd.exe dla IIS Express?
- 16. Wymuszenie IIS Express na klasycznym trybie potoku
- 17. Request timed out - Upłynął limit czasu żądania
- 18. IIS Express 7.5 nie przetwarza jednocześnie żądań
- 19. Python na IIS: jak?
- 20. Usługi IIS Express nie rozpoczną się
- 21. Jak zmienić IIS Developer Express na "Classic Mode"
- 22. Jak ustawić limit czasu dla TcpClient?
- 23. Jak ustawić limit czasu dla IOStream tornada?
- 24. Jak ustawić limit czasu dla dataWithContentsOfURL: url
- 25. Jak włączyć SSL dla IIS Express w VS2015
- 26. Konfiguracja limit czasu żądania dla kontrolerów WebAPI
- 27. Błąd routingu w usługach IIS 7 i IIS Express generujących błędy HTTP 404
- 28. Czy można obniżyć wersję IIS Express 8 -> IIS Express 7.5 z VS2012
- 29. Łączenie IIS Express, używając Android emulatora
- 30. Jak mogę utworzyć nowy plik applicationhost.config na serwerze IIS Express?
Dziękuję za bardzo interesującą odpowiedź, ale jest to niedopuszczalne dla mojego problemu: "Oznacza to jednak, że każde żądanie może upłynąć 5 minut ..." Potrzebuję tylko programowego rozwiązania bez interwencji web.config. –
O ile mi wiadomo, nie ma programowego sposobu, aby to zrobić ze względu na sposób, w jaki IIS jest proxy dla DNX. Jeśli nie edytujesz tej wartości, żądanie zawsze będzie zawsze 502 po 2 minutach –
@MartinBeeby Dodanie tej linii powoduje teraz awarię aplikacji podczas uruchamiania, domyślnie nie ma tam domyślnego węzła '' –