46 votes

Application_End global.asax

Quelqu'un peut-il me dire quand Application_End est déclenché dans le cycle de vie d'une application ? Lorsque toutes les sessions sont terminées, est-ce que Application_End se déclenche automatiquement ? + Y a-t-il d'autres raisons pour lesquelles Application_End pourrait être déclenché ?

2 votes

J'ai supprimé ma réponse selon laquelle Application_End ne se déclenche que lorsque vous fermez le site web. Cependant, quelques minutes de recherche m'ont permis d'obtenir des informations contradictoires sur cette question et je ne veux pas être rejeté pour avoir donné une mauvaise réponse.

1 votes

Il ne s'agit pas d'une réponse à votre question, mais d'une piste à explorer si cet événement se produit et que vous ne savez pas pourquoi : blogs.msdn.com/b/tess/archive/2006/08/02/

40voto

Dillie-O Points 16780

El application_end se déclenche principalement lorsque le pool IIS est recyclé ou que l'application elle-même est déchargée. Une autre chose à noter est qu'une modification d'un fichier dépendant (par exemple web.config) entraînera le rechargement de l'application, ce qui provoquera le déclenchement de l'événement application_end pendant que l'application se ferme.

À noter que le seul exemple que j'ai trouvé de l'événement de fin d'application se déclenchant lorsque la dernière session de l'utilisateur se termine est dans une vieille documentation datant de 2001. Je ne suis pas sûr que ce critère soit toujours valable.

2 votes

J'ai remarqué que lorsque le web.config est modifié, il peut s'écouler quelques minutes avant que l'application_end soit déclenchée.

0 votes

Pour répondre à la question de @anphu, lorsque l'application est rechargée en raison d'un changement de configuration (ou de DLL), il y a souvent une période pendant laquelle l'ancienne instance de l'application et la nouvelle instance de l'application fonctionnent côte à côte, car l'ancienne instance finit de traiter ses requêtes existantes. odetocode.com/articles/305.aspx - bonne lecture pour ce sujet

0 votes

La fin de l'application sera-t-elle appelée si je désinstalle à partir de l'invite de commande l'application Web qui a été installée à l'aide du paquet msi ?

12voto

Eric Rosenberger Points 1641

Application_End est déclenché lorsque le processus de travail ASP.NET se termine. Cela se produit généralement après une période d'inactivité configurable ou lorsque IIS (ou le pool d'applications concerné) est arrêté ou redémarré.

Lorsqu'il est exécuté dans IIS 6.0, le délai d'inactivité est configurable via les paramètres du pool d'applications dans Internet Services Manager (Idle Timeout dans l'onglet Performance). Sous les versions antérieures de IIS, il peut être défini dans machine.config (idleTimeout sous processModel).

2 votes

Savez-vous s'il existe une instance où le processus pourrait se terminer sans exécuter Application_End. Par exemple, j'ai mappé un partage réseau dans Application_Start, et je veux déconnecter ce partage dans Application_End. Existera-t-il un moment où l'application pourra se terminer sans déclencher Application_End ? J'imagine qu'une panne de courant répondrait à ce critère. Mais qu'en est-il d'une erreur fatale de l'application ?

3 votes

@crush : oui, absolument, chaque fois que le processus se termine de manière "inattendue", l'événement ne se déclenchera pas ; les exemples incluent les pannes de courant/de matériel, toute situation où un thread dans le processus "s'accroche" et le pool d'applications se termine (par exemple IISReset si la requête la plus longue prend plus de 30 secondes pour se terminer), tout cas où quelqu'un ou quelque chose fait manuellement "End Process" sur ce processus w3wp. exe (par exemple dans le gestionnaire des tâches), tout "Force Close", et toute situation où du code non géré provoque des erreurs de mémoire ou d'autres erreurs au niveau du processus (débordement de pile, GPF, etc.).

0voto

Daniel Giacomelli Points 101

Dans mon cas, le pool d'applications était recyclé car la propriété Délai d'inactivité (minutes)

La valeur par défaut de cette propriété est 20 (minutes).

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X