ASP.NET livello di applicazione rispetto al livello di sessione e Global.asax ... confusa
-
08-10-2019 - |
Domanda
Il testo che segue è tratto dal libro che sto leggendo, 'MCTS Self-Paced Training Kit (esame 70-515) Applicazioni Web di sviluppo con ASP.NET 4" . Dà la riduzione di attività di Application Life Cycle.
- Un primo utente effettua una richiesta per una pagina del sito.
- La richiesta viene inoltrata al pipeline di elaborazione, che lo inoltra al runtime di ASP.NET.
- Il runtime ASP.NET crea un'istanza della classe ApplicationManager; questa istanza di classe rappresenta il dominio framework .NET che verrà utilizzato per eseguire le richieste per l'applicazione. Un dominio applicazione isola variabili globali da altre applicazioni e permette ad ogni applicazione di carico e scarico separatamente, come richiesto.
- Dopo che il dominio di applicazione è stata creata, viene creata un'istanza della classe HostingEnvironment. Questa classe fornisce l'accesso agli elementi all'interno dell'ambiente di hosting, come ad esempio le cartelle di directory.
- ASP.NET crea le istanze degli oggetti principali che verranno utilizzati per elaborare la richiesta. Questo include HttpContext, HttpRequest e HttpResponse oggetti.
- ASP.NET crea un'istanza della classe HttpApplication (o un'istanza viene riutilizzato). Questa classe è anche la classe di base per il file Global.asax di un sito. È possibile utilizzare questa classe per intercettare gli eventi che si verificano quando l'applicazione si avvia o si arresta. Quando ASP.NET crea un'istanza di HttpApplication, crea anche i moduli configurati per l'applicazione, come il SessionStateModule.
- Infine, processi ASP.NET richiesta tramite il HttpApplication pipleline. Questo gasdotto include anche una serie di eventi per la convalida richieste, URL mapping, accesso alla cache, e altro ancora.
Il libro quindi dimostrato un esempio di utilizzo del file Global.asax:
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
Application["UsersOnline"] = 0;
}
void Session_Start(object sender, EventArgs e)
{
Application.Lock();
Application["UsersOnline"] = (int)Application["UsersOnline"] + 1;
Application.UnLock();
}
void Session_End(object sender, EventArgs e)
{
Application.Lock();
Application["UsersOnline"] = (int)Application["UsersOnline"] - 1;
Application.UnLock();
}
</script>
Quando si avvia un'applicazione? Qual'è la differenza tra sessione e livello di applicazione? Sto piuttosto confuso su come questo viene gestito. Ho pensato che le classi livello di applicazione "SAT in cima ad" un oggetto AppDomain, e il dominio di applicazione conteneva informazioni specifiche per tale sessione per quell'utente. Qualcuno potrebbe spiegare come IIS gestisce classi di livello applicaiton, e come una classe HttpApplication siede sotto un dominio di applicazione? Nulla è apprezzato.
Soluzione
Niente vive fuori di un AppDomain
così, naturalmente, la HttpApplication
ha da istanziato all'interno di uno.
Passaggio 3-6 capita solo una volta nella vita della vostra applicazione. Quando un'istanza ApplicationManager
si è creato è solito essere creato di nuovo per la prossima richiesta. Lo stesso è per HostingEnvironment
e HttpApplication
. Ciò significa che i valori memorizzati nel Application-collezione sarà rimangono lì per ottenere per tutte le richieste successive durante il ciclo di vita dell'applicazione.
C'è un AppDomain
per applicazione, non per sessione o per richiesta.