2009-10-08 10 views
0

J'ai donc fait de mon mieux pour minimiser mon viewstate sur mon application ASP.net ajax, la compression http, en désactivant viewstate dans les champs cachés, mais je voudrais aller plus loin. Ainsi, après des recherches, il semble qu'il y ait deux approchesasp.net côté serveur viewstate sans sessions

a) utiliser la voie 1.x ASP.net qui utilise LoadPageStateFromPersistenceMedium

b) ou utiliser la voie 2.x ASP.net SessionPageStatePersister

Alors B ne semble pas bon parce que si je comprends bien, viewstate serait lié à l'identifiant de session, et puisque ma session peut expirer pour un certain nombre de raisons que je veux ne pas vouloir cela.

Alors, quelle est la meilleure approche pour enregistrer viewstate sur le serveur qui dépend des sessions?

Si c'est LoadPageStateFromPersistenceMedium et utilise des champs cachés, comment puis-je injecter un champ caché avec un ID aléatoire dans une page?

Comment déterminer quand il est temps d'effacer les fichiers viewstate sur le serveur?

+1

Si vous voulez minimiser l'état, avez-vous pensé ASP.NET MVC? –

Répondre

0

Je pense que vous devriez envisager sérieusement l'option Session. Il est optimal sur les ressources et même si la session expire si votre mécanisme d'authentification est réglé sur le délai d'expiration de la session, cela ne pose aucun problème.

http://professionalaspnet.com/archive/2006/12/09/Move-the-ViewState-to-Session-and-eliminate-page-bloat.aspx

comme solution de repli, vous pourriez mettre en œuvre une base de page qui met l'ID de session dans le ViewState, vérifie sur postback et si elle est différente que ne le fait une action pour récupérer. La seule autre option que vous avez serait de créer votre propre PageAdapter qui utilise le DB ou un autre magasin de données.

+0

Nous utilisons l'authentification par formulaire, donc je ne pense pas qu'elle soit alignée sur le délai d'expiration de la session. que pensez-vous de cette approche dans http://aspnet.4guysfromrolla.com/articles/011707-1.aspx où ils ont fait leur propre classe FileSystemPageStatePersister. Pensez-vous que cela fonctionnerait mieux, par exemple sur une ferme Web? – Tuviah

+0

Utilisez simplement SQL Server pour la persistance de session ou utilisez le service sur une seule machine et il fonctionnera parfaitement sur une batterie de serveurs Web. –

+0

Un autre problème est que les sessions expirent après 20 minutes par défaut. Bien sûr, nous pourrions l'étendre, mais cela prendra juste plus de mémoire .. ont également des problèmes avec l'utilisateur en cliquant et en arrière plusieurs fois, en basculant entre les navigateurs .. ou en supprimant leurs cookies. J'ai lu qu'il est possible d'écrire son propre PageStatePersister qui génèrerait un guid, l'attacherait à un champ caché sur une page, puis enregistrerait viewstate dans une base de données ou un fichier en utilisant le guid comme clé. serait-ce une meilleure approche? – Tuviah

Questions connexes