Pregunta

En algunos escenarios, colocando app_offline.htm En la raíz es justo: hace algunas actualizaciones, el mensaje aparece mientras se actualiza, y eso es todo. La idea es, como dice Microsoft, que antes cualquier cosa se llama, IIS primero verifica si app_offline.htm está allí y, de ser así, cancela todo y lo muestra.

Entonces, para tan bien, pero en muchas situaciones no funciona:

  • Cuando tiene un error de compilación en una página ASPX y un usuario se vincula directamente a ella
  • Cuando tienes asambleas en conflicto
  • Cuando tiene un error de análisis en su web.config
  • En medio de eliminar / cargar todo el sitio.
  • Un enlace directo a una página HTML estática todavía se muestra como tal
  • File-No-Founds, se arrojan a los concursos de acceso antes de que se muestre el mensaje

Posiblemente existen más escenarios que fallan. Mi punto es: para cualquier trabajo de actualización serio, app_offline.htm no es adecuado. A veces creo una redirección en IIS, a otro sitio, pero es posible que otro sitio no siempre esté disponible y puede confundir a los usuarios.

Idealmente, me gustaría mantener la ubicación actual en la barra de ubicación de la URL del usuario final, mostrar el mensaje y tener la página refrescante automáticamente cada minuto para ver si el sitio ha vuelto, de modo que el usuario continúe donde él A la izquierda de cuando el sitio regrese. Si bien técnicamente es bastante fácil con una página estática, fallará por las razones mencionadas anteriormente en el momento en que se lanza un error.

¿Fue útil?

Solución

Nadie más mencionó web.config y recompilación, así que aquí está. Me he encontrado con este problema. No estoy de acuerdo con la persona que dijo que "no está destinado al uso de productos": VS 2010 usa App_offline cuando se implementa para que se hornee en el código.

La solución (el crédito va a Kurt Schindler, publicación de blog aquí).

  1. Copie app_offline.htm a su sitio
  2. hacer un web.config que se ve así (ver a continuación el bloque numerado)
  3. Copie ese web.config hasta su directorio remoto
  4. Copie todos los archivos del sitio, excepto su verdadero web.config hasta el Dir remoto
  5. Copie el verdadero web.config hasta el directorio remoto (que debería comenzar una recompilación)

web.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration>
  <system.web>
    <httpRuntime waitChangeNotification="300"
       maxWaitChangeNotification="300"/>
  </system.web>
  <system.webServer>
     <modules runAllManagedModulesForAllRequests="true"  />
  </system.webServer> 
</configuration>

La consecuencia de esto es que No puede usar la implementación de la aplicación VS 2010 directamente Si te importa que los usuarios finales no vean a YSOD durante un despliegue. Por lo tanto, necesitará usar NANT o alguna otra herramienta de implementación para hacerlo.

Otros consejos

Una forma en que he visto esto manejado en varios sitios de tráfico muy altamente es tener múltiples carpetas en el directorio inetPub. Algo como:

inetpub
     \ site2011-02-03 
     \ site2011-03-14

Donde el "Sitio2011-02-03" es el sitio existente y el "Sitio2011-03-14" es el que se presenta hoy. Una vez que se completa el empuje a la nueva carpeta, cambia el sitio IIS para apuntar al nuevo directorio. En caso de falla, cambia II a la versión anterior.

Francamente, nunca he encontrado los errores de los que hablas cuando usas app_offline.htm. Siempre ha funcionado correctamente para derribar el sitio; Incluso para enlaces directos a las páginas. Supongo que podrías tener algo más aquí. Y he usado IIS 7 y 7.5 (2008 R2) con él.

actualizar
Solo miré en nuestra configuración. Tenemos app_offline.htm asignado como el principal documento predeterminado en nuestros servidores. Eso podría ser un factor atenuante.

Me gusta la idea de usar una aplicación web "fuera de línea", mientras que su aplicación web real está fuera de línea. Configuraría un enlace simbólico en su directorio web para señalar la aplicación apropiada.

Su configuración puede parecer la siguiente:

Web_dir (este es el directorio al que IIS sirve www.yourdomain.com)
Aplicación web

  • Realwebapp
  • OfflineWebApp

Escenario: su aplicación está en línea
Web_dir -> realwebapp (Web_dir está vinculado a realwebapp)

Escenario: tu aplicación está fuera de línea
Web_dir -> OfflineWebApp (Web_dir está vinculado a OfflineWebApp)


Esencialmente, termina con dos aplicaciones web diferentes: una aplicación web real y una aplicación web "fuera de línea". Esto le brinda la flexibilidad de redirigir a los usuarios a otro sitio, pero mantiene la apariencia de ser su dominio, ¡porque es así!

La aplicación web real es la aplicación web real. Este es el que está haciendo cambios y el que tiene su contenido real.

La aplicación web "fuera de línea" tiene muy poco contenido. Tal vez solo contiene la página estática que mencionó en su pregunta. Tal vez tenga algún enrutamiento para manejar cualquier solicitud de página, mostrar un mensaje fuera de línea y recargar cada minuto.

Su directorio web IIS es en realidad un enlace a una de estas dos aplicaciones web. Normalmente, estará vinculado a su aplicación web real. Cuando esté listo para comenzar (re) implementar su aplicación web, cambia su directorio web para apuntar a la aplicación "fuera de línea". Después de que se complete el despliegue, cambia el enlace de nuevo para que apunte a la aplicación web real una vez más.

No creo que app_offline.htm fuera destinado para uso de producción.

Mi solución sería crear una aplicación web separada con un módulo que atraiga todas las solicitudes y redirige a una página .htm estática con una cadena de consulta del sitio solicitado y algunos JavaScript para volver a intentar la solicitud original.

Cuando esté listo para realizar el mantenimiento, configure la aplicación ficticia para manejar todas las solicitudes a su dominio. Use un puerto diferente o dominio temporal mientras realiza su mantenimiento para que pueda probar. Una vez que haya terminado, devolverlos y los usuarios que decidieron esperar deben ser redirigidos a su página solicitada originalmente.

Solo he hecho la mitad de esto antes (cambiar los puertos de aplicación para activar el sitio actualizado), por lo que puede haber otros pasos involucrados para obtener la experiencia del usuario deseada.

Espero que esto ayude.

En nuestro caso, App_offline.htm no funcionó hasta que comentamos la sección de nuestra página web.config. Con él sin commentarse, redirigiría a la página de error que habíamos definido en lugar de app_offline.htm como se esperaba.

Publicación vieja, lo sé, pero todavía no vi esta:

  1. Cree un nuevo sitio con app_offline.htm.
  2. Agregue app_offline.html al sitio que se está actualizando.
  3. Elimine la vinculación del sitio que se está actualizando.
  4. Agregue la vinculación al sitio de AppOffline.
  5. Agregue una vinculación especial al sitio de destino (usando el puerto # o alguna otra URL de tocador, haga filtrado de IP o cualquier otra cosa que necesite).
  6. Hacer validación en el sitio de destino.
  7. Restaurar la vinculación de AppOffline al sitio de destino.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top