2010-08-24 5 views

Répondre

1

Si les requêtes font partie de la même session, utilisez simplement la session sur HttpContext. Sinon, stockez la variable dans le contexte de l'application et mettez-la à jour/utilisez-la à partir de là.

+0

tvanfosson si je stocke la valeur en session et j'initialise la session dans la première requête et ensuite la change quand la valeur change alors la seconde requête obtient seulement la valeur de la session assignée en premier – munish

+0

@munish - Il se peut que la deuxième requête commence avant la première demande modifie réellement la valeur. Essayez de placer l'accès à la session dans une section critique (en utilisant 'lock' sur un objet verrou par session) pour être sûr que si la première requête arrive à la section critique en premier, la seconde n'aura pas accès tant que la première ne sera pas terminée la mise à jour. Assurez-vous également qu'ils utilisent la même session. Si ce n'est pas authentifié, vous devrez peut-être définir un cookie pour garder la session collante. – tvanfosson

+0

Tvanfosson, Mon exigence réelle est comme ceci Dans mvc.net je fais la première demande asynchrone au serveur et cela prend tellement de temps c'est pourquoi je veux ajouter une barre de progression sur la page. Pour cela, je fais une deuxième requête asyn pour obtenir la valeur modifiée afin que je puisse changer la valeur de la barre de progression. C'est pourquoi j'ai ajouté une variable de session et changé la valeur de temps en temps pendant que le processus de sauvegarde se poursuit. Et je veux obtenir cette valeur modifiée en utilisant ma deuxième demande asynchrone. – munish

0

En tant que tvanfosson suggested, il est probable que le navigateur met en cache les résultats, de sorte que vous ne voyez que les premiers résultats, surtout si vous utilisez HTTP GET au lieu de POST. Pour éviter cela, appliquez cet attribut la « barre de progression » l'action:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] 

En outre, à moins que l'action « barre de progression » exécute sur un contrôleur qui a spécifiquement accès en lecture seule à la session, il sera forcé de Attendez que l'action Async soit terminée. Voir Andy's answer to "ASP.NET MVC and Ajax, concurrent requests?". Cela signifie que vous devez diviser l'action de la barre de progression vers un contrôleur distinct qui a cet attribut appliqué:

[SessionState(SessionStateBehavior.ReadOnly)] 

En résumé, votre action de barre de progression devra ressembler à:

[SessionState(SessionStateBehavior.ReadOnly)] 
public class ProgressBarController : Controller 
{ 
    [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] 
    public ActionResult ProgressBar() 
    { 
     var progress = Session["progress"]; 
     return Json(progress, JsonRequestBehavior.AllowGet); 
    } 
} 
Questions connexes