ASP.NET est largement utilisé pour les applications Web à fort trafic qui gèrent des millions d'utilisateurs simultanément. Les organisations déploient ces applications sur des fermes Web à charge équilibrée. L'un des aspects importants d'ASP.NET est l'état d'affichage, un mécanisme qui stocke les pages, les contrôles et les valeurs personnalisées entre plusieurs requêtes HTTP entre le client et le serveur Web. Cependant, l'utilisation efficace de l'état d'affichage, comme prévu, peut avoir un impact sur les performances et la bande passante.
Points clés à retenir
Éliminer la surcharge de la charge utile : L'état d'affichage standard d'ASP.NET stocke les données de la page dans une chaîne Base64 cachée qui peut dépasser 100 Ko, ce qui ralentit les temps de réponse ; NCache remplace cela par un minuscule GUID de 40 octets.
Réduire les coûts de sortie du cloud : En conservant les données volumineuses de l'état d'affichage sur le serveur et en n'envoyant qu'un jeton au navigateur, vous réduisez considérablement la consommation de bande passante et les coûts associés dans les déploiements Azure ou AWS.
Améliorer l'évolutivité de la ferme Web : Dans les environnements à charge équilibrée, un cache distribué comme NCache garantit que View State est synchronisé sur tous les nœuds du serveur, évitant ainsi les erreurs de « validation MAC de View State ».
Améliorer la sécurité des applications : Les données sensibles des formulaires sont stockées en toute sécurité dans le cache côté serveur plutôt que d'être exposées dans le code HTML du navigateur du client.
Implémentation low-code : Optimisation de l'état de la vue avec NCache Ne nécessite aucune modification logique de votre application. Seules des configurations mineures sont requises dans le web.config et navigateur d'application fichiers.
Qu'est-ce que l'état d'affichage ASP.NET ?
Cette fonctionnalité puissante suit les entrées et les sélections de l'utilisateur sur une page Web, même après un rechargement ou une actualisation. Elle permet à l'application Web de conserver les entrées et les sélections de l'utilisateur sans nécessiter de sessions côté serveur. Les valeurs d'état d'affichage sont stockées dans un champ masqué sur la page et codées sous forme de chaîne Base64. Cela ressemble à ceci :
|
1 2 3 4 |
<input id="__VIEWSTATE" type="hidden" name="__VIEWSTATE" value="/wEPDwUJNzg0MDMxMDA1D2QWAmYPZBYCZg9kFgQCAQ9kFgICBQ9kFgJmD2QWAgIBD xYCHhNQcm2aW91c0NvbnRyb2xNb2RlCymIAU1pY3Jvc29mdC5TaGFyZVBvaW50Lld lYkNvbnRyb2xzLlNQQ29udHJbE1vZDA1XzRlMjJfODM3Y19kOWQ1ZTc2YmY1M2IPD 2…==" /> |
Défis liés à l'état d'affichage d'ASP.NET
Bien que l'état d'affichage soit extrêmement utile, il peut devenir volumineux, notamment dans les applications comportant des contrôles complexes comme les grilles. Cette taille accrue augmente le volume des requêtes et réponses HTTP, ce qui ralentit le temps de réponse de l'application en raison de la surcharge liée à la sérialisation Base64 et à l'augmentation de la taille des données HTTP.
Un autre inconvénient réside dans l'augmentation de la consommation de bande passante, qui impacte la latence du réseau et accroît considérablement les coûts de sortie dans les déploiements cloud tels qu'Azure ou AWS. Par exemple, si chaque requête HTTP ajoute 60 à 100 Ko de données d'état d'affichage, la multiplication par le nombre total de transactions fait rapidement grimper les coûts. Enfin, l'envoi de données sensibles dans le cadre de l'état d'affichage pose des risques de sécurité, rendant le chiffrement nécessaire – un processus qui peut s'avérer coûteux en termes de performances.
Pourquoi mettre en cache l'état de la vue ASP.NET ?
Pour atténuer ces difficultés, la mise en cache de l'état d'affichage ASP.NET sur le serveur web et l'attribution d'un GUID comme clé peuvent s'avérer très efficaces. Le serveur envoie ce GUID au navigateur dans un champ caché, et le navigateur le renvoie avec la requête HTTP suivante. Le serveur utilise ensuite ce GUID pour récupérer l'état d'affichage correspondant depuis le cache. Cette approche réduit la charge utile envoyée au navigateur, améliorant considérablement les temps de réponse et diminuant drastiquement les coûts de bande passante.
La comparaison suivante met en évidence comment le déplacement de l'état de vue du côté client vers un cache distribué comme NCache transforme fondamentalement le profil de ressources de votre application :
| Fonctionnalité | État de la vue ASP.NET standard | État de vue mis en cache avec NCache |
|---|---|---|
| Charge utile côté client | Volumineux (souvent plus de 100 Ko) | Minimal (environ 40 octets) |
| Consommation de bande passante | Élevé (transfert de chaque requête) | Très faible (échange GUID uniquement) |
| Risque de sécurité | Élevé (exposé dans le champ caché) | Faible (les données restent dans un cache sécurisé) |
| Performance du serveur | Inférieur (en raison d'une sérialisation importante) | Optimisé (récupération rapide en mémoire) |
Configuration NCache pour la mise en cache de l'état de vue ASP.NET
Si votre application ASP.NET s'exécute dans une batterie de serveurs Web à charge équilibrée, vous devez utiliser un cache distribué. Un cache autonome comme le cache ASP.NET ne fonctionnera pas. Pour cela, NCache est un cache distribué au niveau de l'entreprise qui fournit un Module de mise en cache de l'état de vue ASP.NET. Son implémentation nécessite des modifications de code minimes : juste une petite modification de votre fichier web.config ASP.NET. Suivez les étapes ci-dessous pour le configurer.
- Créez un fichier app.browser dans votre application ASP.NET sous le répertoire App_browsers. Ajoutez vos adaptateurs de page au fichier app.browser comme indiqué ci-dessous.
12345<browser refID="Default"><controlAdapters><adapter controlType="System.Web.UI.Page"adapterType="Alachisoft.NCache.Adapters.PageAdapter"/></controlAdapters></browser> - Ajoutez ensuite la référence d’assemblage suivante dans la section de compilation du fichier web.config.
1234567<compilation defaultLanguage="C#" debug="true"><assemblies><add assembly="Alachisoft.NCache.Adapters,Version=1.0.0.0,Culture=neutral,PublicKeyToken=cff5926ed6a53769"/></assemblies></compilation> - Enregistrez votre section de configuration dans le fichier web.config.
1234567<configSections><sectionGroup name="ncContentOptimization"><section name="settings"type="Alachisoft.NCache.ContentOptimization.Configurations.ContentSettings"allowLocation="true" allowDefinition="Everywhere"/></sectionGroup></configSections> - Spécifiez les paramètres de votre section de configuration dans le fichier web.config (qui a été enregistré ci-dessus).
12345678910<ncContentOptimization><settings enableMinification="true"enableViewstateCaching="true"groupedViewStateWithSessions="true"viewstateThreshold="0"enableTrace="true"><cacheSettings cacheName="mycache"><expiration type="Sliding" duration="300"/></cacheSettings></settings></ncContentOptimization> - Enfin, enregistrez le gestionnaire HTTP dans la section HttpHandlers de web.config comme suit.
12345<add verb="GET,HEAD" path="NCResource.axd"validate="false"type="Alachisoft.NCache.Adapters.ContentOptimization.ResourceHandler,Alachisoft.NCache.Adapters, Version=1.0.0.0,Culture=neutral,PublicKeyToken=cff5926ed6a53769"/>
Après la configuration NCache, vous pouvez voir la balise View State dans votre application comme indiqué ci-dessous.
|
1 2 3 4 5 6 |
<input type="hidden" name="__NCPVIEWSTATE" id="__NCPVIEWSTATE" value="vs:cf8c8d3927ad4c1a84da7f891bb89185"/> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value=""/> |
Notez qu'une autre balise cachée est ajoutée avec ASP.NET ViewState. Cette nouvelle balise contient une clé unique qui fait référence à l'état d'affichage stocké dans votre cache distribué. Lorsque le serveur d'applications doit récupérer l'état d'affichage, il peut y accéder rapidement depuis le cache, ce qui améliore considérablement les performances.
Conclusion
En mettant en cache votre état d'affichage ASP.NET avec NCache, vous pouvez obtenir des améliorations remarquables dans les temps de réponse de vos applications tout en réduisant considérablement les coûts de bande passante. Cette solution simple mais efficace améliore considérablement les performances globales de vos applications ASP.NET, les rendant plus efficaces et économes en ressources. Découvrez ces avantages en essayant NCache Découvrez par vous-même le module View State d'ASP.NET !
Questions fréquentes
Q : Pourquoi un cache distribué est-il nécessaire au lieu d'un cache ASP.NET local ?
A : La mise en cache standard d'ASP.NET est locale à un seul serveur. Dans une ferme de serveurs Web à charge équilibrée, si une requête de publication arrive sur un serveur différent de celui de la requête initiale, le cache local ne contiendra pas l'état d'affichage. NCache fournit un environnement distribué où tous les serveurs de la ferme partagent les mêmes données d'état d'affichage.
Q : Quel est le but du seuil d'état d'affichage réglage?
A: Le seuil d'état d'affichage (en Ko) vous permet de définir une limite de taille minimale pour la mise en cache. Si l'état d'affichage d'une page est inférieur à ce seuil, il reste côté client comme d'habitude. Ainsi, vous n'utilisez les ressources du cache que pour les états d'affichage volumineux qui provoquent réellement des ralentissements.
Q : La mise en cache de l'état de la vue nécessite-t-elle des modifications de mon code .NET existant ?
R : Non. L'intégration est gérée au niveau du fournisseur. En enregistrant le Alachisoft.NCacheAdaptateurs dans votre web.config et navigateur d'application fichiers, NCache Intercepte automatiquement le cycle de vie de l'état d'affichage sans que vous ayez besoin de réécrire la logique de votre page.
Q : Comment le navigateur sait-il quel état d'affichage récupérer du cache ?
A: NCache remplace la chaîne Base64 massive dans le __VIEWSTATE Champ caché contenant un GUID unique et léger. Lors d'une requête POST, le navigateur renvoie ce GUID au serveur, qui NCache utilise comme clé pour récupérer instantanément les données originales du cluster.
Q : Puis-je lier l'expiration de l'état d'affichage à la session d'un utilisateur ?
A : Oui. En paramétrant groupedViewStateWithSessions="true" dans votre configuration, NCache peut effacer automatiquement les états de vue mis en cache d'un utilisateur lorsque sa session ASP.NET expire, contribuant ainsi à optimiser l'utilisation de la mémoire dans le cluster de cache.







Vous pouvez utiliser NCache pour Azure pour stocker l'état de session ASP.NET pour les applications Microsoft Azure ASP.NET. Voici un blog qui explique les options de stockage de session Microsoft Azure et pourquoi NCache pour Azure est la meilleure parmi toutes les options disponibles dans Microsoft Azure.
https://20.200.20.123:86/storing-asp-net-session-state-in-a-microsoft-azure-distributed-cache/
Quelqu'un utilise-t-il avec succès Windows Azure Caching (préversion) pour gérer l'état de la session ?