7

Bevor Sie über das Downvooten oder sagen Sie mir "google es", lesen Sie bitte das Problem genauer. Dies ist ein altes/klassisches Problem, aber die alte/klassische Lösung funktioniert nicht mehr. Hier ist sehr einfaches Szenario in Visual Studio 2013/2015 zu reproduzieren:ASP.NET MVC 5 gleichzeitige Anfragen sind in der Warteschlange auch mit deaktivierter Sitzung

1) Erstellen von ASP.NET-Anwendung mit MVC-Vorlage: enter image description here enter image description here

2) öffnen Controller \ HomeController.cs und fügt Attribut Controller und "Sleep" Aktion:

[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) Öffnen Sie die Datei: Ansichten \ Home \ Index.cshtml und Add/ersetzen Inhalt html mit dem folgenden:

<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) Führen Sie es (spielt keine Rolle, ob Sie IIS oder IIS Express oder Vs Dev Server verwenden) - Open Home/Index. Klicken Sie auf F12, um das Dev-Tool zu öffnen, und öffnen Sie die Registerkarte Netzwerk. Auf der Startseite klicken Sie zweimal schnell auf "Anfrage". Sie können die zweite Anforderung sehen fast 6 Sekunden dauert:

enter image description here

enter image description here

im Debug-Modus in der Steuerung können Sie sehen, dass Session null ist:

enter image description here

Cookies sind völlig leer (ASP.NET-Sitzungs-ID ist nicht vorhanden) enter image description here

Bitte lassen Sie mich wissen, was ich vermisse?

die Einstellung Hinzufügen von unten an web.config hilft auch nicht:

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

Wenn Sie etwas verwenden Wie [Fiddler] (http://www.telerik.com/fiddler) um die Server-Methode aufzurufen, werden Sie feststellen, dass die Anfragen auf dem Client und nicht auf dem Server stehen. Ihr serverseitiger Code lässt mehrere Anfragen zu, es ist der Browser, der sie in die Warteschlange stellt. Probieren Sie den Composer in Fiddler aus, um Ihre Testanforderungen zu erstellen. –

+0

Ein weiterer Beweis dafür ist, wenn Sie auf Ihrer Ajax-Anfrage 'cache: false' setzen. –

+0

Ich bekomme überhaupt keine Verzögerung. Das Problem ist lokal für Sie. Der Code funktioniert gut für mich. 3 Sekunden pro Anfrage für viele Anfragen. – rism

Antwort

2

ich viel Zeit zu diesem Thema verbracht und viele Informationen gefunden, die Sie oben gesehen haben auch nicht Korrigiere das Problem. Meine parallelen Anfragen standen immer Schlange, ich sah das sowohl im Internet Explorer als auch in Firefox.

fand ich diesen Artikel bezog eine MVC-Anwendung ist mit this article

Dies zeigt, dass Sie Disabled [SessionState(SessionStateBehavior.Disabled)] statt Einstellung es Readonly verwenden können.

Ich habe meinen Code, der den AJAX GET-Aufruf ausgeführt hat, auf seinen eigenen Controller verschoben, da ich anderen Code im aktuellen Controller hatte, der Session über TempData verwendete. Dies korrigierte mein Problem und mein $.get() Aufruf an den Controller mit deaktivierter Sitzung würde parallel mit dem $.post() zu dem anderen Controller, der Sitzung verwendet, verarbeiten.

+0

Hallo. Mein Anwendungsfall ist ein bisschen anders. Ich möchte, dass die nachfolgenden Anfragen nicht in die Warteschlange gestellt werden, sondern irgendwie getötet oder überhaupt nicht bedient werden. Kannst du mir helfen, das zu tun? –

2

Concurrent parallel Anfragen für mich gearbeitet, wenn ich mein Controller mit diesem Attribut versehen

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

Es funktioniert besser als die oben Deaktivieren des Sitzungsstatus und wurde in MVC wieder hinzugefügt 3. More info here

+0

Gelöst für mich auf vs2010 – jefissu

Verwandte Themen