Impossible de sérialiser l'état de session à l'aide de stateserver
Je m arriver d'erreur suivant et vous demandez-vous si l'on peut rendre le Système.Les données.Linq.EntitySet serializable
Impossible de sérialiser l'état de la session. Dans "StateServer" et "SQLServer" mode, ASP.NET va sérialiser les objets état de session, et comme un résultat de non-objets sérialisables ou MarshalByRef les objets ne sont pas autorisés. La même restriction s'applique si des cas similaires, la sérialisation est fait par la coutume de magasins d'état de session dans la "Coutume" de mode.
Description: Une exception non gérée s'est produite pendant l'exécution de la demande web actuelle. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et où elle a son origine dans le code.
Détails De L'Exception: System.Web.HttpException: Impossible de sérialiser l'état de la session. Dans "StateServer" et "SQLServer" mode, ASP.NET va sérialiser les objets état de session, et comme un résultat de non-objets sérialisables ou MarshalByRef les objets ne sont pas autorisés. La même restriction s'applique si des cas similaires, la sérialisation est fait par la coutume de magasins d'état de session dans la "Coutume" de mode.
Source De L'Erreur:
Une exception non gérée s'est produite lors de l'exécution de la demande web actuelle. Informations concernant l'origine et l'emplacement de l'exception peut être identifié à l'aide de la trace de pile d'exception ci-dessous.
Trace De La Pile:
[SerializationException: Type De Système.Les données.Linq.EntitySet`1[[NES.HiLo.Les données.DAO.UserResource, NES.HiLo.De données, Version=1.0.5012.39381, Culture=neutral, PublicKeyToken=null]]' en Assemblée de "Système".Les données.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 " n'est pas marqué comme sérialisable.]
Système.Moment de l'exécution.La sérialisation.FormatterServices.InternalGetSerializableMembers(RuntimeType type) +7738715
Système.Moment de l'exécution.La sérialisation.FormatterServices.GetSerializableMembers(Type, StreamingContext contexte) +258
Système.Moment de l'exécution.La sérialisation.Des formateurs.Binaires.WriteObjectInfo.InitMemberInfo() +111
Système.Moment de l'exécution.La sérialisation.Des formateurs.Binaires.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext contexte, SerObjectInfoInit serObjectInfoInit, IFormatterConverter convertisseur, ObjectWriter objectWriter) +422
Système.Moment de l'exécution.La sérialisation.Des formateurs.Binaires.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext contexte, SerObjectInfoInit serObjectInfoInit, IFormatterConverter convertisseur, ObjectWriter objectWriter) +51
Système.Moment de l'exécution.La sérialisation.Des formateurs.Binaires.ObjectWriter.Écrire(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) +7636088
Système.Moment de l'exécution.La sérialisation.Des formateurs.Binaires.ObjectWriter.Serialize(Objet graphique, en-Tête[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) +461
Système.Moment de l'exécution.La sérialisation.Des formateurs.Binaires.BinaryFormatter.Serialize(Flux serializationStream, Objet graphique, en-Tête [] - têtes, Boolean fCheck) +134
Système.Web.Util.AltSerialization.WriteValueToStream(la valeur de l'Objet, BinaryWriter écrivain) +1577
OriginalL'auteur rumi | 2013-09-21
Vous devez vous connecter pour publier un commentaire.
L'exception réellement vous dit déjà ce qu'est la question, EntitySet n'est pas serializeable. Par conséquent, il ne peut pas être stockée dans l'état de session si vous utilisez la session DB fonctionnalité.
EntitySet ne pas mettre en œuvre/l'appui de cette. Par conséquent, de le stocker dans l'état de session, vous devez lire les données dans vos propres objets et de les enregistrer par exemple.
Ou tout simplement ne pas essayer d'utiliser l'état de session de "persistance" de ce genre d'objets, car habituellement, vous ne voulez pas le faire (pas pratique).
Alors, quelle est la meilleure pratique pour ce genre de chose?
Mettre en œuvre votre demande apatrides bon comme vous pouvez vous en empêche beaucoup de questions. Chaque fois que vous avez besoin de l'utilisateur des états ou des données de profil, vous pouvez persister dans une base de données (des tables dédiées) et charger les données dans la mémoire. Si nécessaire, vous pouvez utiliser à mémoire distribuée caches de conserver les données disponibles pour plusieurs serveurs web.
OriginalL'auteur MichaC
Plus facile & l'une des meilleure solution est d'utiliser
Json.NET
bibliothèque.Cette bibliothèque vous permet de faire des bidirectionnel transformation de
LINQ
les objets à leurJSON
représentation.Par exemple, vous pouvez stocker le produit dans le point de vue de l'état , avec juste quelques lignes de code:
et de les récupérer en arrière trop :
Référer à ces 2 liens pour plus d':
1.) http://james.newtonking.com/projects/json-net.aspx
2.) http://www.codeplex.com/json/
si votre application utilise
in-process
la gestion de l'état, vous serez capable de stocker LINQ objets en Session, de l'Application et de mise en Cache. Toutefois, vous ne serez pas en mesure de les stocker dans l'état d'affichage.La raison en est que les données stockées dans l'état d'affichage est sérialisé à l'aide d'un module de formatage binaire.
Donc la solution est de faire de la
LINQ
classe sérialisable, vous aurez besoin de marquer tous lesSystem.Data.Linq.EntitySet
etSystem.Data.Linq.EntityRef
champs avecNonSerialized
attribut et de marquer avecSerializable
attribut de laLINQ
classe.Et encore une autre solution consiste à extraire manuellement les données de la
LINQ
des objets, de la stocker dans certains format intermédiaire (class
,struct
,... etc). et plus tard manuellement le transformer.OriginalL'auteur R.C