J'ai un site qui détient un verrou exclusif sur certaines ressources. J'ai utilisé les événements .NET Application_Start et Application_End pour acquérir et libérer le verrou sur ces ressources au moment approprié. Pour que cela fonctionne correctement, il ne peut y avoir qu'une seule instance de mon application en cours d'exécution à un moment donné.
Pour que cela se produise, j'ai défini la Disable Overlapped Recycle
propriété du pool d'applications sur True
. Cette propriété est censée garantir que l'ancien processus de travail s'arrête complètement avant qu'un nouveau ne démarre chaque fois que le pool d'applications est recyclé. Cela fonctionne bien chaque fois que le pool d'applications est recyclé manuellement via IIS, automatiquement à la suite de l'atteinte du délai d'inactivité ou automatiquement selon des règles de temps / intervalle de temps spécifiques.
Cependant, lorsque le fichier web.config du site est mis à jour, cette règle n'est pas appliquée - Un nouveau processus de travail démarre avant l'arrêt de l'ancien. Cela provoque de mauvaises choses. J'ai la Disable Recycling for Configuration Changes
propriété définie sur False
car je souhaite que le pool d'applications soit recyclé lorsque le web.config est mis à jour - cela se produit fréquemment pendant le développement.
Est-ce quelque chose qui est attendu ou est-ce un bogue dans IIS? EST ma seule option à configurer pour que la modification du web.config ne recycle pas le pool d'applications? Je préfère ne pas le faire, car je suis presque sûr que cela causera de nombreux maux de tête avec des personnes modifiant la configuration et oubliant ensuite de recycler le pool d'applications.
Mise à jour:
Pour être plus clair, lorsque le nouvel start
événement de processus de travail est appelé avant la fin de l'arrêt de l'ancien processus de travail, l'ancien end
événement de processus de travail n'est jamais appelé - il ne se produit pas dans le désordre, il ne se produit jamais du tout.