Je reçois un comportement bizarre dans asp.net MVC2 (au moins ce n'est pas ce que j'attends). J'ai une action httppost du contrôleur qui traite les cartes de crédit. Je mets une variable de session sur le serveur pour me faire savoir si un utilisateur a essayé de traiter une carte. J'efface cette variable de session quand j'ai fini. Je fais des messages très rapides pour tester le processus et la variable de session revient à zéro à chaque fois parce que j'efface la variable de session à la fin du processus. J'ai quelques impressions de débogage qui me montrent que toutes les demandes sont traitées de manière synchrone. C'est ... la première tentative se produit, elle échoue, la variable de session est effacée, la deuxième tentative essaye et échoue et la variable est effacée, etc ... Ma première pensée était que c'était un effet secondaire du débogage et qu'il venait juste d'être aligné demande à des fins de débogage à l'aide du serveur Web local. Donc, je l'ai mis sur un serveur de développement et la même chose se produit. Plusieurs soumissions/messages sont traités de manière synchrone. Je mets même un System.Threading.Sleep dedans pour m'assurer qu'il s'arrêtera juste après que j'ai placé la variable de session et il ne commencera même pas la deuxième demande START jusqu'à ce que le premier soit fait.asp.net mvc 2 multithread
Est-ce que quelqu'un d'autre a vu ce comportement? Ma compréhension était qu'un processus de travail a été engendré pour chaque demande et que ces actions pourraient se produire de manière asynchrone.
Voici quelques pseudo-code
if (Session["CardCharged"] != null)
return RedirectToAction("Index", "Problem");
Session["CardCharged"] = false; //starting the process
System.Threading.Thread.Sleep(10000);
//charge card here
if (!providerResponse.IsApproved)
{
System.Diagnostics.Debug.WriteLine("failed");
Session["CardCharged"] = null; //have to allow them to charge again since this failed
return View(myModel);
}
Session["CardCharged"] = true;
return RedirectToAction("Index", "OrderComplete");
Je dois mentionner que mon code échoue toujours le chèque de carte de crédit à des fins de test. J'essaie de tester la situation où le traitement est toujours en cours et rediriger l'utilisateur ailleurs. J'ai placé une variable de session fictive ailleurs pour m'assurer que l'identifiant de session «colle». Je sais donc que l'identifiant de session est le même pour chaque requête.
Merci
Comment générez-vous les demandes de test? Est-il possible qu'ils soient faits de manière synchrone? – joelt
Je clique rapidement sur Soumettre ou actualiser la page. Comme il y a un thread slero après avoir défini la variable, cela ne devrait pas avoir d'importance. La prochaine demande devrait être vérifiée et redirigée. Mais la demande ne commence même pas jusqu'à ce que l'autre soit fait. –
Je pense qu'il peut s'agir d'un problème de demande unique par session. Au moins en ASP classique, il y a une telle limite. – svinto