Question

Comme vous le savez, dans ASP.NET, vous pouvez stocker les données de session dans l’un des trois modes suivants:

  • InProc
  • État de la session
  • SQL Server

En mode InProc, vous pouvez stocker n’importe quel type d’objet de données même s’il n’est pas sérialisable. Cependant, en modes Session Server et SQL Server, vous ne pouvez stocker que des données sérialisées.

Dans mon projet, j'ai un portail prêt à l'emploi qui utilise " InProc " mode pour stocker sa session. J'ai besoin d'utiliser Session State à la place en raison de problèmes d'évolutivité et de gestion des échecs.

Le problème que ce portail stocke en interne des objets non sérialisés dans le contexte de session (c'est-à-dire que les objets stockés n'implémentent pas l'interface ISerializable). Je n'ai pas accès à leur code. Existe-t-il une solution permettant de stocker les objets de session dans State Server sans modifier leur code. J'ai toujours accès à leur fichier web.config si cela peut vous aider.

Était-ce utile?

La solution

Pour autant que je sache, la réponse simple est non. Si cela ne vous dérange pas de changer de code, vous pouvez injecter un objet wrapper entre l'objet réel et le vôtre, et demander à votre wrapper de sérialiser l'objet enveloppé (essentiellement en tant que substitut de la sérialisation) - mais d'ici là, il serait presque plus facile de il suffit de réécrire le code ...

Quel genre d'objets sont-ils? En règle générale, les objets pour l'état de session sont de simples classes de données. Par conséquent, vous ne devriez pas avoir trop de problèmes pour les sérialiser.

Autres conseils

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

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

Pour que cette réponse soit plus utile ou directe pour la question à traiter:

Vous ne pouvez pas sérialiser un objet qui n'a pas été défini comme sérialisable. Toute autre manière générique de recréer un objet pourrait avoir pour résultat que l'objet ne présente pas le même état qu'avant sa "sérialisation".

Comme l'a mentionné Marc, vous pouvez le faire en créant votre propre "wrapper" sérialisable, mais vous devez connaître très bien l'objet en question, et l'objet doit disposer de méthodes lui permettant de -créé de telle manière.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top