Je ne sais pas où le problème est ...ASP.NET MVC + jQuery + IIS6: plusieurs requêtes Ajax
J'ai une demande de paiement ajax qui vérifie les informations de suivi pour un paquet sur une page avec une liste des emballages:
$(".fedex_status").each(function() {
var item = this;
// some code to construct tracking_url
$.ajax({
type: "GET",
url: tracking_url,
async: true,
cache: false,
success: function(data) { $(item).html("(" + data + ")"); },
error: function() { $(item).html("request failed...");}
});
});
donc, s'il y a 10 paquets sur la page (10 choses avec classe 'fedex_status') 10 demandes sont créées. Les demandes fonctionnent bien, mais les résultats sont renvoyés un à la fois (de manière sérielle). J'ai ajouté un horodatage au début et à l'arrêt d'une demande dans l'action du contrôleur:
public ActionResult Fedex(string trackingNumber)
{
DateTime requestStart = DateTime.Now;
TrackingService tracking = new TrackingService();
string status = tracking.FedexTrackingNumberStatus(trackingNumber);
return Content(status + " - " + requestStart.ToString("hh:mm:ss.FFF") + " - " + DateTime.Now.ToString("hh:mm:ss.FFF"));
}
Aucun des horodatages se chevauchent. Ainsi, le contrôleur traite les demandes une à la fois. Cela semble merdique.
Maintenant, la requête ajax 'devrait' être parallèle. Il revient définitivement immédiatement (son asynchrone). Lorsque je regarde les journaux IIS, les demandes ont le même horodatage que le retour d'action du contrôleur. Donc, ma question est la suivante: est-ce que jquery n'envoie pas toutes les requêtes ajax en parallèle ou est-ce que IIS ou ASP.NET traite uniquement les demandes en série. Je suis un grand noob avec IIS et les détails techniques d'ASP.NET, donc peut-être qu'il a été mal configuré pour toujours et ne répond qu'à une demande à la fois sur tout (son usage interne seulement, faible trafic). Cela dit, je suis aussi un idiot chez jquery et je ne sais pas comment tester quand les demandes sont en train d'être tirées (tout ce que je sais c'est que l'appel $ .ajax revient immédiatement).
Merci!
C'est malheureux. J'utilise des données temporaires dans d'autres endroits (des messages à l'utilisateur comme 'expédition créée!' Et de la merde comme ça) donc je ne peux pas m'en débarrasser. Ce contrôleur spécifique n'aura jamais besoin de TempData ou Session. Je me demande si la désactivation de TempData au niveau du contrôleur aidera ou si le fait que la session ne soit pas désactivée dans web.config l'emporte si le contrôleur l'utilise ou non. – anonymous
Je pensais que c'était seulement vrai dans un sous-ensemble de circonstances (aspcompt = true vient à l'esprit). Je ne pense pas que la session, à elle seule, entraîne la sérialisation de toutes les demandes. –
@Erv: Le peu de lecture que j'ai fait à ce sujet depuis cette réponse est que dans ASP.NET standard, vous pouvez spécifier le type de verrou que vous voulez sur la session par page. Par défaut je pense que c'est un verrou d'auteur et cela permet seulement 1 requête par page. Vous pouvez le changer pour un verrou de lecteur qui permettra à plusieurs lecteurs, mais bloque les écrivains, et bloquera sur un écrivain détenant le verrou. Je n'ai aucune idée de comment faire tout cela s'applique à ASP.NET MVC. J'aimerais juste dire «utiliser un verrou de lecteur partout» parce que j'utilise l'état de session pour rien de spécial. – anonymous