Cos' è lo stato di una applicazione? Lo stato é l' insieme dei dati e delle variabili che in una data applicazione devono essere mantenute
attive o devono essere condivise da più utenti. Se fossimo in una applicazione Desktop non ci sarebbero problemi; ma nel caso di una Applicazione
Web questa cosa
è impossibile, poichè tramite le richieste Http che usa il browser, non siamo in grado di mantenere attive le informazioni sullo
stato dell'utente o su quelle dell' applicazione.
Tramite ASP.NET siamo in grado di mantenere attivi entrambi, con diverse tecniche.
Lo Stato dell' Applicazione
Tramite l' utilizzo dell' oggetto Application siamo in grado di gestire quelle variabili in formato coppia-chiave di cui dobbiamo
conoscerne lo stato durante l' esecuzione.
Application("MyWebAppVar") = "abcdABCD"
MyLocalVar = Application("MyWebAppVar")
Questa classe eredita da HttpApplicationState viene esposta come istanza (Application) all' interno della classe Page. Quindi
siccome le nostra pagine erediteranno da Page, per ogni pagina potremmo accedere intrisecamente alla proprietà Application.
Vorrei far notare che per mantenere compatibile NET con ASP Classic si può ancora usare la vecchia sintassi :
Application.Contents("MyWebAppVar") = "abcdABCD"
MyLocalVar = Application.Contents("MyWebAppVar")
Volendo possiamo interagire con Application anche tramite due metodi esposti, Add e Remove, come nell' esempio :
Application.Add("MyWebAppVar", "abcdABCD")
Application.Remove("MyWebAppVar")
Infine vediamo una carrellata di tutti i metodi presenti in Application :
'Pulisce tutto l' oggetto
Application.Clear()
'Pulisce tutto l' oggetto (per Asp Classic)
Application.RemoveAll()
'Numero di oggetti presenti
int = Application.Count
- AllKeys
l' insieme di tutte le chiavi, dalle quali si può accedere ai singoli valori.
- Get
Restituisce un elemento tramite chiave e/o indice.
- Set
Aggiorna un elemento tramite chiave o indice.
- GetKey
Restituisce la chiave in base all' indice.
- ToString
Restituisce una stringa di quell' elemento (Viene usato per un valore stringa e non per un riferimento ad un oggetto ... ).
- Lock e Unlock
Con questi metodi ci assicuriamo che durante l' Accesso all' oggetto application, uno e solo un utente abbia la possibilità di modificare tale
oggetto. Purtroppo con questi metodi, va a farsi benedire la Scalabilità.
Gli Static Object.
Tramite l' ausilio dell' oggetto application possiamo tenere traccia anche degli oggetti. Esempio, potremmo inserire un oggetto MyClass e
voler accedere alle sue proprietà :
'Global.asax
<object runat="server" id="MyClassIstance" class="MyClass" scope="Application">
</object>
'Aspx
Response.Write("Il valore è : " & MyClassIstance.value)
Nota : Se dobbiamo usare Application é bene istanziare a Default (0 o "") nell' evento Start di Application o Session; questo
ci renderà più semplice sapere se è stato modificato o no il valore della variabile ...
Schema per l' Oggetto Application
Informazione |
Problema |
Alternativa |
Stringa connessione Db |
A questa info ci accediamo non spesso ... |
La memorizziamo come variabile nel Web.Config |
Dataset con consultazione frequente |
Utile ma attenzione all' aggiornamento |
Potremmo usare il modulo di gestione della cache |
Variabili di contatori, Flag |
Ne risente la scalabilità |
Meglio usare un Database |
Riferimenti e istanza oggetti |
Se lo usiamo con COM non thredabili, ne risente di gran lunga la scalabilità |
Assicurarsi che sia un COM Thread Safe ... |
Considerazioni Finali
A parer mio bisogna tener conto anche dei seguenti fattori primadi valutare la scelta di usare l'oggetto application, inoltre vi ricordo che un uso
improprio e/o errato comporta la perdita di performance e scalabilità ...
- Durata : Le informazioni memorizzate nell' oggetto application restano vive fino alla fine dell' esecuzione dell' applicazione,
ma se si spegne il server o semplicemente l' utente si disconnette queste info vanno perse ...
- WebFarm : le informazioni dell' oggetto application non possono essere condivise tra più macchine .... Quindi non lo useremo per
oggetti che devono essere disponibili a tutti.
- Memoria : siamo tutti a conoscienza del fatto che la RAM ha un limite e se questo limite viene superato la macchina utilizza la
memoria fisica ... con conseguente perdita di prestazioni.