Cambiar la ruta física en IIS a través de appcmd no está activado

9

Nos hemos encontrado con un problema en IIS 7.5 donde tenemos un sistema de implementación simple que consiste en lo siguiente:

Cree un archivo zip de nueva raíz web, que consta de tres carpetas:

Api
Site
Manager

Esto se descomprime en una nueva carpeta (digamos que lo llamamos "SITE_REV1") y contiene un script que invoca lo siguiente (uno para cada raíz web):

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

Esto generalmente funciona, en 9/10 veces. En algunos casos, la raíz web parece estar actualizada correctamente (si inspecciono la configuración básica en el Administrador IIS, la ruta parece correcta), pero el sitio en ejecución en cuestión apunta realmente a la ubicación anterior. La única forma en que hemos logrado "arreglarlo" es ejecutando un reinicio de IIS. No es suficiente reciclar el grupo de aplicaciones en cuestión.

A veces parece incluso necesario hacer un reinicio, pero no estoy 100% seguro de que sea correcto (no siempre fui yo el que solucionó el problema).

Reescribí el script usando Powershell y el módulo de Administración Web, esperando que hubiera un error en appcmd, pero ocurre el mismo problema.

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

¿Alguien ha experimentado algo como ésto? ¿Alguien tiene idea de lo que está sucediendo y qué puedo hacer para evitar este problema? Hacer un reinicio de IIS no es realmente una buena opción para nosotros, porque eso afectaría a todos los sitios en el servidor cada vez que intentemos implementar cambios en un solo sitio.

EDITAR: Hemos identificado que un inicio / detención del sitio (NO el grupo de aplicaciones) en el Administrador de IIS resuelve la ruta física errónea, pero si detengo el sitio usando appcmd, cambio la ruta física y luego lo inicio, todavía sufro los mismos problemas Estoy en blanco ...

jishi
fuente
1
Para esos momentos en los que no funciona, ¿es posible que las solicitudes fueran las existentes atendidas por el antiguo grupo de aplicaciones a través de una rotación superpuesta ? No estoy seguro de los requisitos de tiempo de actividad de su sitio, pero podría intentar deshabilitar la rotación superpuesta e incluir un comando de reciclaje de grupo de aplicaciones en su script de implementación.
explunit
No, todas las solicitudes posteriores se atienden desde la raíz web anterior, incluso un reciclaje de la aplicación volverá a cargar la aplicación desde la raíz anterior. Un reinicio de IIS es la única forma en que logramos restaurarlo. Es como el applicationHost.config se actualiza (ya que el administrador IIS muestra la ruta correcta), pero el servidor IIS en sí funciona desde la configuración anterior ...
jishi
No puedo encontrar una mención en applicationHost.config, ¿así que supongo que es el "falso" predeterminado?
jishi
OK, estaba pensando si disallowOverlappingRotation = true, entonces el antiguo grupo de aplicaciones podría no cerrarse debido a un hilo de larga ejecución o algo así. Es por eso que IIS Reset sería necesario para borrarlo por completo. Pregunta interesante: será curioso ver qué respuestas aparecen.
explunit
Tenga en cuenta que el reciclaje de un grupo de aplicaciones no es lo mismo que detener / iniciar. ¿Has probado este método? Tenga en cuenta que esto eliminará todas las conexiones actuales y hará que el sitio no esté disponible (error 500) hasta que se reinicie el grupo de aplicaciones.
John Homer

Respuestas:

0

¿Cambiar la ruta física desde el Administrador de IIS funciona correctamente e inmediatamente?

Es posible que desee probar el siguiente comando. De forma diferente, la sintaxis debería tener el mismo resultado, pero tal vez funcione de manera ligeramente diferente internamente, lo que hace que IIS recoja los cambios (mejor):

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

Marco Miltenburg
fuente
AFAIK nunca hemos tenido ningún problema cuando lo cambiamos manualmente en el administrador de IIS, solo programáticamente.
jishi
0

Un reciclaje de grupo de aplicaciones debería ser suficiente por sitio. Estos son procesos independientes. Con demasiada frecuencia, los artículos y procesos promueven el uso de iisreset. ¿Es una opción detener / iniciar el grupo de aplicaciones para un sitio? ¿Es esta una solución de servidor único y está tratando de minimizar el tiempo de inactividad del sitio? Hay una opción para deshabilitar el reciclaje en los cambios de configuración. Entonces puedes reciclar manualmente. Cuando ocurre el problema, ¿qué se enumera en applicationHost.config?

Steve Schofield
fuente
No estoy 100% seguro, pero dado que el Administrador de IIS enumera la nueva ruta, supongo que applicationHost.config está actualizado. Sin embargo, cuando el proceso se recicla, no parece usar los valores recién configurados. Como esto solo sucede ocasionalmente, es difícil solucionarlo de manera oportuna.
jishi