2011-06-01 25 views
7

recibiendo nosotros un problema por el que cada vez que copiar un archivo DLL en el directorio bin, nuestro principal de dominio en el sitio web se paraliza y la única manera de llevar la copia de seguridad es reiniciando el "Servicio de publicación WWW".ASP.net C# requiere IIS reinicio cuando la nueva DLL copia en el directorio BIN

Ejecutamos un sitio web que contiene una cantidad de aplicaciones IIS que se ejecutan en un único servidor donde cada una de estas aplicaciones está configurada para ejecutarse en diferentes grupos de aplicaciones.

Tenemos una gran base de código que contiene más de 280 páginas aspx en todo el sitio. Nuestro dominio principal contiene aproximadamente 100 páginas aspx, mientras que los subdominios contienen 15 o 20 cada uno.

Cuando hacemos una acumulación Actualmente estamos generando un montón de archivos DLL que copiar manualmente en el directorio bin servidores de producción. Tan pronto como hacemos esto, IIS obviamente inicia un reciclaje compilando cada una de las páginas aspx y códigos detrás. En este punto, el sitio esencialmente se detiene (a veces debe reiniciarse reiniciando el servicio de publicación web para reactivarlo).

Lo curioso es que esto sólo ocurre cuando hacemos uso de la aplicación principal de IIS de dominio, es decir, el www. Si implementamos un archivo bin en el subdominio de la misma manera, funciona casi instantáneamente.

Incluso si hago un iisreset.exe, esto no parece resolver el problema.

algunas preguntas:

  1. ¿Hay alguna forma de acelerar el proceso actual, de modo que no es necesario reiniciar el servidor?
  2. Habría ningún cambio de código obvias o actualizaciones que ser la causa de la necesidad de un reinicio del servicio (a veces corremos un iisreset pero esto no se parece a traer de vuelta a la vida)?

Algunas especificaciones:

  • código está escrito en: C#
  • .NET Framework: 2.0
  • Servidor: Windows Web Server 2008
  • iis versión: IIS7
  • Base de datos: MSSQL 2008 Standard

Cualquier ayuda sería apreciada. Gracias por adelantado.

Respuesta

12

Cuando configura un archivo app_offline.htm en el wwwroot de su aplicación IIS de dominio principal esta aplicación se desconecta. Este es el comportamiento predeterminado de IIS como Scott Gu descripto. Al hacer esto, todos los archivos DLL se pueden sobrescribir con seguridad y cuando eliminas el app_offline.htm, la aplicación se iniciará la próxima vez que se presente una solicitud.

Más información acerca de app_offline.htmhere y here.

Básicamente, si coloca un archivo con este nombre en la raíz de un directorio de aplicación web, ASP.NET 2.0 cerrará la aplicación, descargará el dominio de la aplicación del servidor y detendrá el procesamiento de cualquier nueva entrada solicitudes para esa aplicación. ASP.NET también responderá a todas las solicitudes de páginas dinámicas en la aplicación devolviendo el contenido del archivo app_offline.htm (por ejemplo: es posible que desee tener un mensaje de "sitio en construcción" o "por mantenimiento") .

Esto proporciona una manera conveniente de eliminar su aplicación mientras realiza grandes cambios o copia en muchas nuevas funcionalidades de página (y desea evitar el problema molesto de las personas que golpean y activan su sitio en medio de un contenido actualizar). También puede ser una forma útil de desbloquear y descargar inmediatamente una base de datos SQL Express o Access cuyos archivos de datos .mdf o .mdb residen en el directorio/app_data.

Una vez que elimine el archivo app_offline.htm, la siguiente solicitud en la aplicación hará que ASP.NET cargue la aplicación y el dominio de la aplicación nuevamente, y la vida continuará de manera normal.

+0

. Así que el problema principal causado por bloqueos a los ddls no se libera, por lo que tendremos que reiniciar el servicio para obtener el servidor ¿apoyo? – StacMan

+0

Este podría ser el problema. Pero la forma correcta de actualizar su aplicación web en IIS es poner primero una app_offline.htm en su raíz y luego actualizar el sitio para evitar el bloqueo y otros problemas como los que tiene. No es necesario un iisreset cuando usa app_offline.htm. Cuando use vs2010 con tfs2010 y obtenga una versión más reciente, vs2010 también colocará un app_offline.htm en su raíz y lo eliminará cuando se recuperen todos los archivos, consulte la pregunta sobre ese http://stackoverflow.com/questions/3965346/ app-offline-htm-created-deleted-whenever-i-check-out-a-file-in-tfs. –

+0

Gracias agradezco la ayuda con eso. Todavía me gustaría descubrir por qué requiere un reinicio y las posibles causas del problema; sin embargo, su sugerencia sí mejora la usabilidad. – StacMan

0

¿Puede detener ese sitio web en IIS mientras está copiando los dlls y luego volver a iniciarlo? Porque no detendrá otros sitios web alojados en el mismo IIS.

+0

Hemos intentado esto algunas veces, pero no hemos ayudado. No necesariamente logra lo que estamos buscando de todos modos (es decir, explica por qué el despliegue en www requiere reinicio mientras que los subdominios tardan unos segundos en reciclarse) – StacMan

3

Por lo que yo sé, no es necesario hacer iisreset cuando se agrega un archivo DLL en la carpeta bin. El dll debe cargarse automáticamente desde el contenedor.

Debe realizar iisreset cuando agrega un nuevo dll a la caché de ensamblados global.

+2

Esta es una opción, pero es más seguro configurar un app_offline.htm en su raíz y luego copie el dll así que también se liberan todos los bloqueos existentes en su dll. –

+0

iisreset no volará en un servidor que aloja varios sitios, para los cuales solo ha cambiado uno. –

+0

@JesseBuchanan A menudo, si un iisreset no vuela, un reciclaje de grupo de aplicaciones específicas podría – mlhDev

Cuestiones relacionadas