ASP.Net données Persistante dans toute l'application
Question
Comment puis-je persister des données spécifiques utilisateur pour une application ASP.Net.
J'ai essayé une variable de session -. Pas bon lorsque le processus de travail recycle
Je besoin de quelque chose qui peut être consulté GLOBALEMENT par une classe de ma demande.
Conseils bienvenue.
J'ai essayé d'utiliser l'état de session de asp.net Server, mais je suis arrivé quelques DLLs s'écraser parce qu'ils sont sérialisable.
Y at-il une autre façon d'avoir une variable persistante dans l'application?
La solution
état de session ASP.NET peut être configuré pour persister à une base de données.
Autres conseils
Data Store dans une base de données (telles que SQL Server).
Vous devez utiliser session. Vous pouvez accéder à l'échelle mondiale état de session dans une classe comme ça ...
HttpContext.Current.Session
Pour éviter de perdre des sessions par le recyclage des processus de travail, utilisez mode de StateServer.
Vous pouvez modifier la session État du serveur pour ne pas être dans le processus qui rendra beaucoup plus stable et séparer également du processus de travail (Vous devez être en mesure de démarrer le service d'Etat Asp.NET sur le serveur si il fonctionne pas déjà)
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20"/>
Aussi, si vous avez besoin de le partager à travers des applications dans le même domaine, vous devriez être en mesure de leur donner la même machine à clés
Il n'y a rien que vous pouvez vraiment faire le recyclage des processus. Si vous utilisez le cache intelligemment pour conserver les informations dans un sens plus global, mais vous avez toujours la même limitation de processus de travail.
J'essaie de concevoir mon application dans une configuration multiniveau avec des objets d'entité commerciale. Les méthodes d'usine pour mes objets utilisent le cache comme une sorte de modèle de instantiation paresseux. Si son dans le cahce, tirez. Dans le cas contraire, le mettre dans le cache pour la prochaine fois.
i.e.
MyAppsNameSpace.MyBusinessLayerNameSpace.MyObject.GetObject(objectID)
maintenant, quand cela retourne mon objet, il peut être à partir du cache ou non, si l'objet est en utilisation intensive, alors il sera probablement mis en cache.
Cela peut être utilisé dans votre application entière et parce que le mécanisme de mise en cache est maintenu au centre vous n'avez pas vraiment inquiéter.
Vous pouvez utiliser le fournisseur de profils avec une base de données SQL en tant que votre magasin de sauvegarde.
Voir cette MSDN article
Si vous perdez des données lorsque le processus de travail recycle alors vous devriez cesser d'utiliser le mode persistence InProc pour la session. Utilisez StateServer ou SQL Server. En fin de compte, vous pouvez construire votre propre module de persistence de session si ni satisfait vous.