Zanim pomyślisz o wprowadzeniu w dół lub powiedzeniu mi "google it", przeczytaj uważnie ten problem. Jest to stary/klasyczny problem, ale stare/klasyczne rozwiązanie przestało działać. Oto bardzo prosty scenariusz do odtworzenia w Visual Studio 2013/2015:ASP.NET MVC 5 równoczesnych żądań czeka w kolejce nawet z wyłączoną sesją
1) Tworzenie aplikacji WWW z wykorzystaniem ASP.NET MVC szablon:
2) Otwarte sterowniki \ HomeController.cs i dodać atrybut kontroler i "Sen" akcja:
[SessionState(System.Web.SessionState.SessionStateBehavior.Disabled)]
public class HomeController : Controller
{
public ActionResult Sleep(int? time)
{
System.Threading.Thread.Sleep(time ?? 3000);
return Content("OK");
}
public ActionResult Index()
{
...
3) Otwórz plik: Views \ Home \ Index.cshtml i dodać/wymienić zawartość HTML z następujących czynności:
<script>
function ReqClick() {
var startTime = Date();
$.ajax("/Home/Sleep")
.success(function() {
var log = $("#log");
var endTime = Date();
log.text(log.text() + "Start: " + startTime.toString() + " === " + endTime.toString());
});
};
</script>
<button type="button" onclick="ReqClick();">
Request
</button>
<div>
<textarea id="log" style="width:640px; height:480px"></textarea>
</div>
4) Uruchom go (nie ma znaczenia, jeśli używasz IIS lub IIS Express lub Vs Dev Server) - Open Home/index. Kliknij F12, aby otworzyć narzędzie programistyczne, otwórz kartę sieci. Na stronie głównej kliknij dwukrotnie przycisk "Zażądaj". Widać, że drugi wniosek trwa prawie 6 sekundach:
w trybie debugowania w sterowniku widać, że sesja jest null:
Cookies są całkowicie pusty (identyfikator sesji ASP.NET jest nieobecny)
Proszę dać mi znać, czego mi brakuje?
Dodawanie ustawienie poniżej web.config nie pomaga:
<sessionState mode="Off"/> <pages enableSessionState="ReadOnly"/>
Jeśli używasz coś podobnie jak [Fiddler] (http://www.telerik.com/fiddler), aby wywołać metodę serwera zauważysz, że żądania są umieszczane w kolejce na kliencie, a nie na serwerze. Twój kod po stronie serwera pozwala na wiele żądań, to przeglądarka ustawia je w kolejce. Wypróbuj kompozytora w skrzypku, aby utworzyć swoje żądania testów. –
Więcej dowodów na to, jeśli ustawisz "cache: false" na żądanie ajax. –
Nie otrzymuję w ogóle opóźnienia. Problem jest dla ciebie lokalny. Kod działa dobrze dla mnie. 3 sekundy na żądanie dla dowolnej liczby żądań. – rism