In alcuni casi particolari possiamo avere a che fare con applicazioni web che devono caricare grandi quantità di dati all'avvio prima di poter rispondere alla prima richiesta utente. Fino ad ora per far fronte ad una situazione di questo tipo si è dovuto ricorrere a soluzioni personalizzate ed esterne all'applicazione per fare in modo che questa partisse ed eseguisse il metodo Application_Load del Global.asax contenente il codice necessario all'inizializzazione ed al caricamento dei dati.
Per far fronte a questo genere di problematiche in ASP.NET 4.0 è stata introdotta una nuova funzionalità denominata Application Preload Manager, ovvero una funzionalità disponibile solo con IIS 7.5 su Windows Server 2008 R2 che per l'appunto permette di avviare automaticamente un'applicazione prima che questa sia considerata pronta a ricevere la prima richiesta utente.
Per utilizzare questa funzionalità è necessario impostare in IIS 7.5 un application pool in modo tale che questo parta automaticamente attraverso l'impostazione del file applicationHost.config:
<applicationPools> <add name="MyAppPoolName" startMode="AlwaysRunning" /> </applicationPools>
Considerando poi che ogni application pool potrebbe contenere anche più di un'applicazione ASP.NET è necessario specificare, sempre nel file applicationHost.config, anche nello specifico quali applicazioni ASP.NET avviare automaticamente:
<sites> <site name="MyApp" id="1"> <application path="/" serviceAutoStartEnabled="true" serviceAutoStartProvider="MyAutoStartProvider"> </application> </site> </sites> <serviceAutoStartProviders> <add name="MyAutoStartProvider" type="MyApp.MyAutoStartClass" /> </serviceAutoStartProviders>
L'ultimo passo è la creazione di una classe AutoStartProvider che sarà richiamata quando l'applicazione sarà avviata. In questa classe, che implementa l'interfaccia IProcessHostPreloadClient, nel metodo Preload dobbiamo caricare tutti i dati necessari all'avvio dell'applicazione. Fin tanto che l'applicazione è in fase di avviamento e quindi mentre è in esecuzione il metodo Preload, questa sarà impostata in una modalità per cui non potrà rispondere alla richieste utente.