Come già affermato, è altamente sconsigliato che l'applicazione mantenga dati di grandi dimensioni durante Application_End
, poiché potrebbe essere attivata quando il pool di applicazioni viene arrestato, non all'inizio del suo arresto. Questo è spiegato in modo più dettagliato (ma comunque breve) here.
Se si vuole ancora per prendere la chiusura di un pool di applicazioni per tutti i casi che non istantaneamente ucciderlo, in grado di effettuare le seguenti operazioni:
modo sporco
1) Ottenere limite di tempo di spegnimento - Gestore IIS -> Pool di applicazioni -> -> Impostazioni avanzate ... -> Gruppo modello di processo -> Limite tempo di spegnimento (secondo)
2) Creare un thread/attività nell'applicazione per eseguire due volte più spesso dell'arresto limite di tempo per garantire che lo stato di "arresto" possa essere catturato. Questo thread dovrebbe
i) verificare se pool di applicazioni si sta spegnendo
public bool IsShuttingDown()
{
return System.Web.Hosting.HostingEnvironment.ShutdownReason != ApplicationShutdownReason.None;
}
ii) se la chiusura è attiva, fare le tue cose. Assicurarsi che roba è eseguito solo una volta
Più corretto modo (come indicato here)
1) Creare una classe che implementa IRegisteredObject
public class HostingEnvironmentRegisteredObject : IRegisteredObject
{
// this is called both when shutting down starts and when it ends
public void Stop(bool immediate)
{
if (immediate)
return;
// shutting down code here
// there will about Shutting down time limit seconds to do the work
}
}
2) Pubblica il tuo oggetto (Global.asax.cs
)
protected void Application_Start()
{
// other initialization code here
HostingEnvironment.RegisterObject(new HostingEnvironmentRegisteredObject());
}
sì bene, questi casi non riesco a controllare. Voglio controllare quello che so e avere ... – Himberjack
se non ti interessa perdere questi casi limite, allora non ti preoccupare della gestione di un arresto regolare dell'applicazione.rendi semplicemente parte delle supposizioni della tua applicazione – djeeg
Più il "caso limite comune" si preoccupa di un arresto * grazioso *, ad es. per svuotare la registrazione, senza quelle inaspettate .. i pool di app possono essere riciclati abbastanza spesso (e per un grande ambiente con molti pool questo significa che potrebbero esserci molti eventi "caso limite comune" persi). – user2864740