7

Avant de penser à la fonctionnalité de downvotation ou de me dire "google it", veuillez lire le problème plus attentivement. C'est un problème ancien/classique mais la solution ancienne/classique ne fonctionne plus. Voici le scénario très simple à reproduire dans Visual Studio 2013/2015:Les demandes simultanées ASP.NET MVC 5 sont mises en file d'attente, même si elles sont désactivées. Session

1) Créer une application ASP.NET Web en utilisant le modèle MVC: enter image description here enter image description here

2) Contrôleurs ouverts \ HomeController.cs et ajouter attribut contrôleur et d'action "veille":

[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) Ouvrir le fichier: Views \ Home \ Index.cshtml et ajouter/remplacer le contenu HTML avec les éléments suivants:

<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) Lancez-(n'a pas d'importance si vous utilisez IIS ou IIS Express ou Vs Dev Server) - Open Home/Index. Cliquez sur F12 pour ouvrir l'outil de développement, ouvrez l'onglet réseau. Sur la page d'accueil, cliquez deux fois sur le bouton "Demande". Vous pouvez voir que la deuxième demande prend près de 6 secondes:

enter image description here

enter image description here

En mode débogage dans le contrôleur, vous pouvez voir cette session est nulle:

enter image description here

Les cookies sont totalement vide (l'ID de session ASP.NET est absent) enter image description here

S'il vous plaît laissez-moi savoir ce que je manque?

Ajout du paramètre ci-dessous pour web.config ne permet pas non plus:

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

Si vous utilisez quelque chose comme [Fiddler] (http://www.telerik.com/fiddler) pour appeler dans la méthode du serveur, vous remarquerez que les requêtes sont mises en file d'attente sur le client et non sur le serveur. Le code côté serveur autorise plusieurs demandes, c'est le navigateur qui les met en file d'attente. Essayez le compositeur dans Fiddler pour créer vos demandes de tests. –

+0

Plus de preuve de ceci est si vous définissez «cache: false» sur votre requête ajax. –

+0

Je n'ai pas de retard du tout. Le problème vous est local. Le code fonctionne bien pour moi. 3 secondes par demande pour autant de demandes. – rism

Répondre

2

J'ai passé beaucoup de temps sur cette question et a trouvé la plupart des informations que vous avez vu ci-dessus n'a pas non plus corriger le problème. Mes demandes parallèles étaient toujours en file d'attente, je l'ai vu dans Internet Explorer ainsi que Firefox.

Je trouve cet article lié à l'aide d'une application am MVC this article

Cela montre que vous pouvez utiliser Désactivé [SessionState(SessionStateBehavior.Disabled)] au lieu de le mettre à ReadOnly.

J'ai déplacé mon code qui effectuait l'appel AJAX GET à son propre contrôleur car j'avais un autre code dans le contrôleur actuel qui utilisait Session via TempData. Cela a corrigé mon problème et mon appel $.get() au contrôleur avec la session désactivée traiterait en parallèle avec le $.post() à l'autre contrôleur qui a utilisé la session.

+0

Bonjour. Mon cas d'utilisation est un peu différent. Je veux que les demandes suivantes ne soient pas mises en file d'attente, mais en quelque sorte tuées ou pas du tout servies. Pouvez-vous m'aider à faire ça? –

2

demandes parallèles simultanées ont travaillé pour moi quand je décore mon contrôleur avec cet attribut

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

Il fonctionne mieux que l'état de session désactivation ci-dessus et a été réintégrées dans MVC 3. More info here

+0

Résolu pour moi sur vs2010 – jefissu