La modification du chemin physique sur IIS via appcmd n'est pas activée

9

Nous avons rencontré un problème sur IIS 7.5 où nous avons un système de déploiement simple qui se compose des éléments suivants:

Créez un fichier zip de nouveau webroot, composé de trois dossiers:

Api
Site
Manager

Celui-ci est décompressé dans un nouveau dossier (disons que nous l'appelons "SITE_REV1") et contient un script qui invoque ce qui suit (un pour chaque racine Web):

C:\Windows\system32\inetsrv\appcmd set vdir "www.site.com/" -physicalPath:"SITE_REV1\Site"

Cela fonctionne généralement, en 9/10 fois. Dans certains cas, la racine Web semble être mise à jour correctement (si j'inspecte les paramètres de base dans le Gestionnaire des services Internet, le chemin semble correct), mais le site en cours d'exécution est en fait pointé vers l'ancien emplacement. La seule façon dont nous avons réussi à "résoudre ce problème" consiste à exécuter une réinitialisation IIS. Il ne suffit pas de recycler le pool d'applications en question.

Parfois, il semble même nécessaire de faire un redémarrage, mais je ne suis pas sûr à 100% que c'est exact (ce n'est pas toujours moi qui résolvais le problème).

J'ai réécrit le script à l'aide de Powershell et du module d'administration Web, en espérant qu'il y avait un problème dans appcmd, mais le même problème se produit.

Set-ItemProperty "IIS:\Sites\www.site.com" -Name physicalPath -Value "SITE_REV1\Site"

Quelqu'un a-t-il vécu quelque chose comme ça? Quelqu'un a-t-il une idée de ce qui se passe et de ce que je peux essayer de faire pour éviter ce problème? Faire une réinitialisation IIS n'est pas vraiment une bonne option pour nous, car cela affecterait tous les sites sur le serveur chaque fois que nous essayons de déployer des modifications sur un seul site.

EDIT: Nous avons identifié qu'un démarrage / arrêt du site (PAS le pool d'applications) dans IIS Manager résout le chemin physique erroné, mais si j'arrête le site en utilisant appcmd, change le chemin physique, puis le démarre, je souffre toujours de les mêmes problèmes. Je suis à blanc ...

jishi
la source
1
Pour les moments où cela ne fonctionne pas, est-il possible que les demandes soient des demandes existantes servies par l'ancien pool d'applications via une rotation qui se chevauche ? Vous n'êtes pas sûr des exigences de disponibilité de votre site, mais vous pouvez essayer de désactiver la rotation qui se chevauchent et d'inclure une commande de recyclage du pool d'applications dans votre script de déploiement.
expliquez le
Non, toutes les demandes ultérieures sont traitées à partir de l'ancienne racine Web, même un recyclage d'application rechargera l'application à partir de l'ancienne racine. Une réinitialisation IIS est le seul moyen que nous avons réussi à restaurer. C'est comme si l'applicationHost.config est mise à jour (puisque le gestionnaire IIS affiche le chemin correct), mais le serveur IIS lui-même fonctionne à partir de la configuration précédente ...
jishi
Je ne peux pas en trouver mention dans applicationHost.config, donc je suppose que c'est le "faux" par défaut?
jishi
OK, pensais que si disallowOverlappingRotation = true, l'ancien pool d'applications pourrait ne pas s'arrêter en raison d'un thread de longue durée ou quelque chose. C'est pourquoi IIS Reset serait nécessaire pour l'effacer complètement. Question intéressante - sera curieux de voir quelles réponses apparaissent.
expliquez le
Gardez à l'esprit qu'un recyclage de pool d'applications n'est pas la même chose que stop / start. Avez-vous essayé cette méthode? Gardez à l'esprit que cela supprimera toutes les connexions actuelles et rendra le site indisponible (erreur 500) jusqu'au redémarrage du pool d'applications.
John Homer

Réponses:

0

La modification du chemin physique à partir du Gestionnaire des services Internet fonctionne-t-elle correctement et immédiatement?

Vous voudrez peut-être essayer la commande suivante. Sinon, la syntaxe devrait avoir le même résultat mais peut-être que cela fonctionne légèrement différemment en interne, ce qui amène IIS à prendre en compte les modifications (mieux):

C:\Windows\System32\inetsrv\appcmd.exe set app "www.site.com/" -[path='/'].physicalPath:"SITE_REV1\Site"

Marco Miltenburg
la source
AFAIK nous n'avons jamais eu de problème lorsque nous le modifions manuellement dans le gestionnaire IIS, uniquement par programme.
jishi
0

Un recyclage du pool d'applications doit être suffisant par site. Ce sont des processus indépendants. Trop souvent, les articles et les processus encouragent l'utilisation d'iisreset. L'arrêt / le démarrage du pool d'applications pour un site est-il une option? S'agit-il d'une solution à serveur unique et essayez-vous de minimiser les temps d'arrêt du site? Il existe une option pour désactiver le recyclage lors des modifications de configuration. Ensuite, vous pouvez recycler manuellement. Lorsque le problème se produit, qu'est-ce qui est répertorié dans l'applicationHost.config?

Steve Schofield
la source
Je ne suis pas sûr à 100%, mais puisque IIS Manager répertorie le nouveau chemin, je suppose que applicationHost.config est à jour. Cependant, lorsque le processus est recyclé, il ne semble pas utiliser les valeurs nouvellement configurées. Comme cela ne se produit qu'occasionnellement, il est difficile de le résoudre en temps opportun.
jishi