7

Prima di pensare al downvoting o di dirmi "google it", leggere il problema con più attenzione. Questo è un problema vecchio/classico ma la soluzione vecchio/classico non funziona più. Qui è molto semplice scenario di riprodurre in Visual Studio 2013/2015:ASP.NET MVC 5 richieste concorrenti sono in coda anche con Sessione disabilitata

1) Creare un'applicazione Web ASP.NET MVC utilizzando template: enter image description here enter image description here

2) Controller Open \ HomeController.cs e aggiungere attributo controller e azione "Sleep":

[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) aprire il file: \ Visualizzazioni Home \ Index.cshtml e aggiungere/sostituire html contenuto con il seguente:

<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) Eseguire esso (non importa se si sta utilizzando IIS o IIS Express o Vs Dev Server) - Open Home/Index. Fare clic su F12 per aprire lo strumento di sviluppo, aprire la scheda di rete. Nella pagina iniziale fai clic due volte sul pulsante "Richiesta" due volte. Si può vedere che la seconda richiesta prende quasi 6 secondi:

enter image description here

enter image description here

in modalità di debug nel controller che si può vedere che sessione è nullo:

enter image description here

I cookie sono totalmente vuoto (ID sessione ASP.NET assente) enter image description here

Per favore fatemi sapere cosa mi manca?

Aggiunta l'impostazione sottostante per web.config non aiuta:

<sessionState mode="Off"/> 
<pages enableSessionState="ReadOnly"/> 
+0

Se si usa qualcosa come [Fiddler] (http://www.telerik.com/fiddler) per chiamare nel metodo server noterete che le richieste sono accodate sul client e non sul server. Il tuo codice lato server consente più richieste, è il browser che le mette in coda. Prova il compositore in Fiddler per creare le tue richieste di test. –

+0

Prova ulteriore è se si imposta 'cache: false' sulla richiesta ajax. –

+0

Non ho alcun ritardo. Il problema è locale per te. Il codice funziona bene per me. 3 secondi per richiesta per molte richieste. – rism

risposta

2

ho passato un sacco di tempo su questo tema e ho trovato molte delle informazioni che si è visto in precedenza, inoltre, non ha fatto correggi il problema Le mie richieste parallele erano sempre in coda, l'ho visto in Internet Explorer e Firefox.

ho trovato questo articolo relative al sto usando un'applicazione MVC this article

Questo dimostra che è possibile utilizzare disabili [SessionState(SessionStateBehavior.Disabled)] invece di impostare a sola lettura.

Ho spostato il mio codice che stava eseguendo la chiamata AJAX GET sul proprio controller poiché avevo un altro codice nel controller corrente che utilizzava Session tramite TempData. Questo ha corretto il mio problema e la mia chiamata $.get() al controller con sessione disabilitata avrebbe proceduto in parallelo con lo $.post() all'altro controller che ha utilizzato la sessione.

+0

Ciao. Il mio caso d'uso è un po 'diverso. Voglio che le richieste successive non siano in coda, ma in qualche modo uccise o non servite affatto. Puoi aiutarmi a farlo? –

2

richieste parallele simultanee hanno lavorato per me quando ho decorato il mio controller con questo attributo

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)] 

Funziona meglio di quanto sopra la disabilitazione stato della sessione ed è stato aggiunto nel MVC 3. More info here

+0

Risolto per me su vs2010 – jefissu