ASP.NET oggi è ampiamente utilizzato per applicazioni Web ad alto traffico che devono gestire milioni di utenti e sono distribuite in Web farm con bilanciamento del carico. Una parte importante di ASP.NET è View State utilizzata da molte applicazioni. ASP.NET View State è un meccanismo molto potente che memorizza pagine, controlli e valori personalizzati tra più richieste HTTP sul client e sul server web.
ASP.NET View State i valori vengono memorizzati in un campo nascosto nella pagina e codificati come stringa Base64. Un ASP.NET View State Somiglia a questo:
1 2 3 |
<input id="__VIEWSTATE" type="hidden" name="__VIEWSTATE" value="/wEPDwUJNzg0MDMxMDA1D2QWAmYPZBYCZg9kF…" /> |
Sebbene molto utile, ASP.NET View State diventa spesso abbastanza grande soprattutto nelle situazioni in cui l'applicazione ASP.NET ha controlli griglia e molti altri controlli nelle pagine. Questo viene aggiunto alla tua richiesta e risposta HTTP e questo rallenta davvero il tuo tempo di risposta ASP.NET a livelli insopportabili.
Un altro aspetto negativo del pesante ASP.NET View State è il maggiore utilizzo della larghezza di banda che aumenta considerevolmente il costo della larghezza di banda. Ad esempio, se per ogni richiesta HTTP, finisci per aggiungere 60-100k di ulteriori ASP.NET View State dati, basta moltiplicarli per il numero totale di transazioni e vedrai rapidamente quanto ti costerà di più in termini di consumo di larghezza di banda.
Infine, in alcune situazioni, esiste un rischio per la sicurezza con l'invio di dati riservati come parte di ASP.NET View State. Anche crittografarlo prima dell'invio è costoso.
Per risolvere tutti questi problemi puoi memorizzare nella cache ASP.NET View State sul server Web e assegnare un GUID come chiave nella cache. Questo GUID viene quindi inviato al browser in un campo nascosto e ritorna insieme alla successiva richiesta HTTP e viene utilizzato per recuperare il corrispondente ASP.NET View State dalla cache. Ciò riduce il carico utile inviato al browser, il che non solo migliora i tempi di risposta di ASP.NET, ma riduce anche drasticamente il costo del consumo di larghezza di banda.
Se l'applicazione ASP.NET è in esecuzione in una Web farm con bilanciamento del carico, è necessario utilizzare una cache distribuita. Una cache autonoma come ASP.NET Cache non funzionerà. NCache è una cache distribuita a livello aziendale che fornisce ASP.NET View State modulo di memorizzazione nella cache. Per utilizzarlo non è necessaria alcuna programmazione. Basta modificare il tuo web.config ASP.NET per questo.
Ecco i passaggi da utilizzare NCache per la memorizzazione nella cache ASP.NET View State:
- Crea un file app.browser nella tua applicazione ASP.NET. Crealo nella directory App_browser. Collega gli adattatori di pagina nel file app.browser come segue:
123456<browser refID="Default"><controlAdapters><adapter controlType="System.Web.UI.Page"adapterType="Alachisoft.NCache.Adapters.PageAdapter"/></controlAdapters></browser> - Quindi aggiungi il seguente riferimento all'assembly nella sezione di compilazione del file 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> - Registra la tua sezione di configurazione nel file web.config.
12345678910<configSections><sectionGroup name="ncContentOptimization"><section name="settings"type="Alachisoft.NCache.ContentOptimization.Configurations.ContentSettings"allowLocation="true" allowDefinition="Everywhere"/></sectionGroup></configSections> - Specifica le impostazioni per la tua sezione di configurazione nel file web.config (che è stato registrato sopra).
1234567891011<ncContentOptimization><settings enableMinification="true"enableViewstateCaching="true"groupedViewStateWithSessions="true"viewstateThreshold="0"enableTrace="true"><cacheSettings cacheName="mycache"><expiration type="Sliding" duration="300"/></cacheSettings></settings></ncContentOptimization> - Alla fine, registra il gestore HTTP nella sezione HttpHandlers di web.config come segue:
1234567<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"/>
Dopo la configurazione NCache, Puoi vedere il ASP.NET View State tag nella tua applicazione come:
1 2 3 4 5 6 7 |
< input type="hidden" name="__NCPVIEWSTATE" id="__NCPVIEWSTATE" value="vs:cf8c8d3927ad4c1a84da7f891bb89185" /> < input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="" /> |
Si noti che viene aggiunto un altro tag nascosto con ASP.NET View State. Contiene la chiave univoca assegnata a ASP.NET View State della tua pagina, nella tua cache distribuita. Quindi ogni volta che il tuo server delle applicazioni ha bisogno ASP.NET View State valore può ottenerlo facilmente dalla cache.
In questo modo, vedrai un notevole aumento delle prestazioni nei tempi di risposta ASP.NET e anche il costo del consumo di larghezza di banda verrà ridotto in modo significativo.
Si prega di esplorare di più su ASP.NET View State memorizzazione nella cache provando NCache ASP.NET View State modulo te stesso.
Puoi usare NCache per Azure per l'archiviazione dello stato della sessione ASP.NET per le applicazioni Microsoft Azure ASP.NET. Ecco un blog che spiega le opzioni di archiviazione sessioni di Microsoft Azure e il motivo NCache per Azure è la migliore tra tutte le opzioni disponibili in Microsoft Azure.
https://20.200.20.123:86/storing-asp-net-session-state-in-a-microsoft-azure-distributed-cache/
Qualcuno usa correttamente la memorizzazione nella cache di Windows Azure (anteprima) per gestire lo stato della sessione?