2008-10-28 7 views
1

Comme vous le savez, dans ASP.NET, vous pouvez stocker les données de session dans l'un des trois modes suivants:ASP.NET session état du serveur - Enregistrement des données en desordre

  • InProc
  • état de session SQL

Pour le mode InProc, vous pouvez stocker n'importe quel type d'objet de données, même s'il n'est pas sérialisable. Toutefois, dans les modes État de session et SQL Server, vous pouvez uniquement stocker des données sérialisées.

Dans mon projet, j'ai un portail prêt à l'emploi qui utilise le mode "InProc" pour stocker sa session. Je dois plutôt utiliser l'état de session en raison de problèmes d'évolutivité et de gestion des pannes.

Le problème est que ce portail stocke en interne des objets non sérialisés dans le contexte de session (par exemple, les objets stockés n'implémentent pas l'interface ISerializable). Je n'ai pas accès à leur code. Est-il possible de contourner le problème afin que je puisse stocker les objets de session dans State Server sans modifier leur code. J'ai toujours accès à leur fichier web.config si cela peut aider de quelque manière que ce soit.

Répondre

1

AFAIK, la réponse simple est non. Si cela ne vous dérange pas de changer votre code, vous pouvez injecter un objet wrapper entre l'objet réel et le vôtre, et faire en sorte que votre wrapper traite la sérialisation de l'objet enveloppé (essentiellement comme un substitut de sérialisation). il suffit de réécrire le code ...

De quel genre d'objets s'agit-il? Généralement, les objets pour l'état de session sont des classes de données simples, il ne devrait donc pas y avoir trop de problèmes de sérialisation.

+0

En fait, nous n'avons pas accès au code car il s'agit d'un portail .NET tiers. Nous pouvons seulement faire des changements dans le web.config. En ce qui concerne votre commentaire, pouvons-nous inclure un wrapper en tant qu'assemblage/DLL externe et apporter des modifications à web.config pour utiliser ce wrapper pour le stockage de session d'objet? – mohammedn

+0

Pas que je sache; vous devrez changer le code de la page. Donc, si vous n'avez pas accès à cela, vous êtes un peu scuppered. –

1

La sérialisation crée une représentation de l'objet pouvant être stockée et lue pour recréer l'état de l'objet.

Si un objet contient uniquement des types de valeur, vous n'avez peut-être pas besoin d'implémenter ISerializable, mais seulement l'attribut [Serializable].

Pour rendre cette réponse plus utile ou directement à la question à portée de main:

Vous ne pouvez pas serialise un objet qui n'a pas été delcared d'une certaine façon comme sérialisable. Toute autre manière générique de recréer un objet peut avoir pour résultat que l'objet ne possède pas le même état qu'avant la «sérialisation». Comme l'a mentionné Marc, vous pourriez le faire en créant votre propre 'wrapper' sérialisable, mais vous devriez être très familier avec l'objet en question, et l'objet devrait avoir des méthodes qui lui permettraient d'être recréé de cette manière.

+0

quelqu'un peut-il expliquer le vote à la baisse? Mon point est valide. – Ady

+0

Je pense que la réponse n'a pas résolu le problème. – mohammedn

+0

Le -1 ne provenait pas de moi, mais je suppose que puisque le code ne peut pas être modifié, peu importe qu'il soit ISerializable ou [Serializable]. Cela dit, je suis d'accord que votre point est valide, donc je vais le +1 pour égaliser les choses ;-p –

Questions connexes