0

Semblable à This Question, j'ai une application qui dépend fortement de la session en cours. J'essaye maintenant de déplacer le magasin de session à un serveur d'état local.Détermination du contrôle qui est sérialisé

Je reçois l'erreur:

Type 'System.Web.UI.Control' in Assembly 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable.

Le problème est que je ne peux pas déterminer laquelle le contrôle tente d'être sérialisé.

L'exception complète et la trace de la pile ne me montrent aucune information supplémentaire.

Existe-t-il un moyen de déterminer quel contrôle tente d'être sérialisé?

En utilisant ASP.net, IIS7, Framework 4.0

+0

Pourquoi les contrôles en cours de sérialisation et stockés en session, en premier lieu? –

+0

Bonne question. :) C'est une application héritée dont j'ai hérité et que je suis en train de mettre à jour. Un objectif est d'arrêter de les stocker en session tout à fait. – AaronS

+0

L'avez-vous encore réduit à une page? Pouvez-vous définir un point d'arrêt quelque part pour voir où il bombarde? –

Répondre

1

Faites une recherche globale pour Session[ ou Session.Item et tout trouver avec les = à droite. C'est toutes les affectations à la session. Ça ne peut pas me faire plus que quelques centaines. L'un d'entre eux est un System.Web.UI.Control. Il a probablement été mis en session pour éviter de toucher la base de données. Réécrivez ce code pour stocker le DataTable ou DataSet ou d'autres valeurs au lieu de stocker le contrôle.

Si vous n'avez pas le code source, il n'y a pas un moyen facile de faire face à ce manque de décompilation, de corriger le code et de recompiler.

Même si vous donnez sur SqlSession, vous pouvez toujours vouloir arrêter de mettre des contrôles de l'interface utilisateur en Session-- il peut causer des problèmes OutOfMemory: http://blogs.msdn.com/b/tess/archive/2008/05/28/asp-net-memory-thou-shalt-not-store-ui-objects-in-cache-or-session-scope.aspx

+0

Aucun d'entre eux n'est directement ajouté via les appels de session [""]. Je crois qu'ils sont cachés quelque part dans un objet de données, mais plusieurs recherches n'ont rien trouvé. Le but ultime est de s'assurer que personne ne soit ajouté à la session, une fois que je peux déterminer où ils sont. – AaronS

+0

Activer trace.axd et vérifier la variable de session. Il montrera la clé, le type et la valeur. Puis recherchez cette clé dans le code source. Encore une fois, si vous n'avez pas le code source (c'est-à-dire s'il s'agit d'un code tiers ou si le code source est perdu), cela n'aura pas de solution. – MatthewMartin

+0

Bon appel. Bien que cela ne me dise pas directement ce qui causait le problème, il m'a montré quels objets de données spécifiques ont été stockés en session. J'ai été capable de parcourir chacun d'eux pour déterminer où le contrôle était ajouté. Merci pour l'aide. – AaronS

Questions connexes