Qualche tempo fa, avrei risposto: una. Poi quando sviluppai il precompiler approfondii il meccanismo e venni smentito. Chi viene da ASP 3 è abituato all'uso del file global.asa e nel passare a ASP.NET si pensa che global.asax sia il corrispettivo e che HttpApplication rappresenti l'applicazione web. E' così infatti, solo che le istanze sono più di una.
Il motore di ASP.NET, la classe HttpRuntime, per soddisfare una richiesta, chiede a HttpApplicationFactory un'istanza di HttpApplication. E' questa infatti la classe vera che gestisce la richiesta ed implementa IHttpHandler. Sarà lei ad accompagnare tutto il contesto della richiesta e girerà la richiesta all'handler finale mappato a seconda del path.
Ritornando al factory, il metodo principale è GetNormalApplicationInstance il quale non fa altro che creare un'istanza di HttpApplication o di prelevarla da uno stack che mantiene vecchie istanze da reciclare. Questa lista è sincronizzata e quindi non supererà il numero dei worker thread che il processo di ASP.NET può superare (di default 20). Alla fine della richiesta tramite RecycleApplicationInstance verrà poi riposta nello stack per un successivo riutilizzo.
Il factory si occupa anche di fare lo shutdown dell'appdomain qualora il file global.asax cambiasse e di compilare ovviamente la nostra HttpApplication custom.
Di conseguenza si può considerare ciò che scriviamo nel global.asax, thread safe e quindi non dovremo preoccuparci di sincronizzazioni. Dovremmo farlo solo nel caso usassimo metodi statici.
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- LINQ, lazy loading e architettura, l'11 marzo 2011 alle 18:42
- MetadataDiffViewer: aggiornato al .NET Framework 4.0, Silverlight 4.0 e Sharepoint 2010, il 7 gennaio 2010 alle 13:58
- .NET Framework 4.0 beta 1: Windows Communication Foundation, il 18 maggio 2009 alle 16:00
- Parallelizzare in Silverlight 2.0, il 21 aprile 2009 alle 00:25
- Silverlight: performance dell'isolated storage, il 16 aprile 2009 alle 17:38
- MetadataDiffViewer: differenze tra i framework, il 15 aprile 2009 alle 18:56