iis - times - restart application pool




IIS Recycle Global.asax (3)

Ho avuto molto più successo con il collegamento all'evento DomainUnload, è stato attivato in AppPool per il riciclo e l'interruzione dello stesso AppPool.

AppDomain.CurrentDomain.DomainUnload += this.CurrentDomainOnProcessExit;

È possibile prendere un evento di riciclo nel global.asax?

So che Application_End verrà attivato ma esiste un modo per sapere che è stato attivato da un riciclo del pool di applicazioni?

grazie, Lieven Cardoen aka Johlero


Non l'ho mai provato da solo, ma potresti provare ad associare un gestore di eventi all'evento ProcessExit di AppDomain.

...
AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnExit);
...

void OnExit(object sender, EventArgs e) {
    // do something
}

Spero che aiuti!


Quindi, ecco un'idea di come potrebbe funzionare.

In base alla mia precedente risposta (allegare ad AppDomain.CurrentDomain.ProcessExit) e al commento di stephbu :

Ciò colpirà la maggior parte dei processi di demolizione strutturati, ad esempio, ma non sono sicuro che intrappolerà tutte le lacrime. es. http://blogs.msdn.com/jmstall/archive/2006/11/26/process-exit-event.aspx Il riciclo del processo ucciderà il processo se sembra bloccato, il tuo gestore non verrà richiamato.

Suggerisco la seguente strategia:

Nel gestore (regolare) ProcessExit (che supponiamo non verrà chiamato su un riciclo del pool di applicazioni), scrivere alcuni file su disco come " app_domain_end_ok.tmp ".

Quindi in Application_Start del tuo global.asax controlla questo file. Se non esiste è un segno che l'applicazione non è stata terminata in modo pulito (o che è la prima volta che è stata avviata). Non dimenticare di cancellare questo file dal disco dopo il controllo.

Non ci ho provato, ma potrebbe valere la pena provare.





recycle