2009-08-26 6 views
2

Je viens de le remarquer il y a environ une semaine. Je stocke des données sur l'énigme actuelle qu'un utilisateur joue (www.wikipediamaze.com) comme ceci:Les données de session InProc disparaissent

HttpContext.Current.Session.Add ("puzzleInfo", currentPuzzleInfo); Je sais que stocker des données dans la session en utilisant le mode "InProc" est très volatile et sera réinitialisé chaque fois que le web.config change ou un certain nombre d'autres facteurs, y compris le recyclage du pool d'applications.

Cependant, mes données ne restent que quelques secondes à la fois (le temps est variable mais ne sont littéralement pas longues du tout) et disparaissent ensuite. Je suis dans un environnement hébergé partagé donc je ne sais pas si cela aurait quelque chose à voir avec ça.

Une idée de ce qui se passe? Serais-je mieux de le stocker directement sur le client en tant que cookie? S'il vous plaît aider.

Merci!

Répondre

3

Dépannage

perte de données toutes les quelques secondes est inhabituel, il pourrait peut-être un problème avec votre fournisseur d'hébergement partagé - sonne comme le serveur est en baisse constante des sessions pour une raison quelconque. Vous pouvez afficher le sessionID (Session.SessionID) et voir s'il change.

Un incident de processus peut se produire, causé par quelqu'un d'autre sur le serveur. Voici un post de msdn sur le dépannage de ce type de problème (défiler vers le bas à environ 25% du chemin): http://blogs.msdn.com/webtopics/archive/2009/07/22/in-proc-session-state-management.aspx

Cela ne vous aidera pas beaucoup dans un environnement d'hébergement partagé, mais vous pourriez passer le chaîne de soutien. Peut-être qu'ils pourraient regarder les journaux des événements et déterminer qui brise IIS et leur donner le démarrage.

Comme l'a déclaré Sean McDonough:

... étant donné que vous êtes dans un environnement hébergement mutualisé, il y a une bonne chance qu'il ya plus d'un serveur Web hébergement de votre site. Si plusieurs serveurs sont au service de votre site et un mécanisme d'équilibrage de charge est en cours d'utilisation que ne maintient aucune sorte d'affinité séance , vous pourriez simplement rebondir à un serveur Web différent et à partir une nouvelle session; après tout, session ne va pas vous suivre à travers les boîtes.

Alternatives pour l'Etat

Persistance

En tout cas, j'ai toujours trouvé InProc être par intermittence, même peu fiables sur des serveurs dédiés, et donc je l'éviter. Soyez prudent avec les cookies - les cookies sont transmis avec chaque requête (images, scripts, etc.) et doivent être gardés au strict minimum. Vous pouvez penser que «ce projet n'a pas besoin d'être mis à l'échelle», mais une fois que vous avez décidé d'utiliser des cookies pour persister dans votre projet, vous êtes en train de faire une blague proverbiale.Et par là je veux dire, vous sortez des meilleures pratiques et pouvez vous retrouver dans des situations laides, comme cette fois j'avais besoin de persister un document xml pendant une seconde. Ce ne serait pas une bonne idée dans un cookie! Si vous ne disposez pas d'un moyen de configurer le serveur d'état de session (ce qui est vraiment facile) parce que vous êtes dans un environnement d'hébergement partagé, vous pouvez consulter SqlSessionStateStore, qui vous permet de stocker vos données de session dans un SQL Server.

3

Les suggestions de Brian sont excellentes, et je ne peux pas être plus d'accord avec les points qu'il fait. J'aimerais aussi offrir une possibilité supplémentaire.

Savez-vous beaucoup sur l'environnement dans lequel votre application est hébergée? Je demande pour la raison suivante: étant donné que vous êtes dans un environnement d'hébergement partagé, il y a une chance décente qu'il y ait plus d'un serveur Web hébergeant votre site. Si plusieurs serveurs sont en service sur votre site et qu'un mécanisme d'équilibrage de charge est en cours d'utilisation et ne maintient aucune sorte d'affinité de session, vous pouvez simplement rebondir sur un autre serveur Web et démarrer une nouvelle session. après tout, la session in-proc ne vous suivra pas dans les boîtes. Matière à réflexion :-)

+0

Grand point. Upvote, mais marqué Brian comme réponse. – Micah

+0

Bonne pensée Sean. Espérons qu'ils ne feraient pas quelque chose comme ça sans affinité de session, mais on ne sait jamais ... –

+0

Hé ... ouais, j'espère qu'ils ne vont pas rebondir les demandes sans établir d'affinité (du moins sans le dire), mais ils pensent ça ne ferait pas de mal de le mentionner :-) Peu importe, content que Micah ait eu la réponse dont il avait besoin de Brian! –

Questions connexes