IIS 7.5 - La propriété Disable Overlapped Recycle n'est pas respectée lorsque web.config est mis à jour

25

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 Recycleproprié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 Changespropriété définie sur Falsecar 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.

John
la source
Combien de temps après la mise à jour de web.config avant le démarrage du nouveau processus de travail?
Greg Askew
Le nouveau processus de travail commence dès que j'essaie d'accéder au site après un recyclage - donc moins d'une seconde si je suis rapide. S'il est laissé, l'ancien événement d'arrêt du processus de travail a lieu 20 à 30 secondes après le recyclage.
John
J'ai le même problème. Il y a chevauchement
Andrew Rimmer
11
La modification du fichier web.config entraîne le rechargement de l'appDomain. L'appDomain est distinct de l'AppPool. Vous ne devriez pas voir un nouvel identifiant de processus W3WP juste en changeant le web.config. Voir ici treeloop.com/blog/iis-application-domain-and-pool-recycling
kheld
1
@kheld a tout à fait raison (ajoutez peut-être cela comme réponse) ce n'est pas un chevauchement d'appool, c'est un chevauchement d'appDomain. Je ne pense pas que vous puissiez arrêter cela, mais vous pouvez désactiver le recyclage de domaine d'application en cas de changement.
Sam Cogan

Réponses:

1

De cette publication MSDN: https://blogs.msdn.microsoft.com/tess/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles/

Ainsi, dans le cadre de votre processus de déploiement de code, il semble que votre pool sera recyclé lorsque vous déployez l'une de ces modifications:

Recyclage immédiat

  • Modifications de Web.config
  • Modifications de Machine.config
  • Modifications apportées à Global.asax
  • Modifications du répertoire bin
  • Modifications apportées à App_Code

( emprunté à: /programming/302110/what-causes-an-application-pool-in-iis-to-recycle )

Matt McDonald
la source