2010-03-01 11 views
10

Tengo una aplicación web ASP .NET que en el back-end está hablando con un servicio web ASMX. Hemos contado y el tiempo promedio de espera para la solicitud inicial es de 20 años. Me pregunto si hay una forma de poder enviar el servicio web al servidor precompilado, anulando así la necesidad de compilación.¿Cómo evito que IIS compile el sitio web?

También hemos notado que IIS tiende a reciclar sus subprocesos de trabajo y esto también provoca una compilación. El proceso en sí no se accede con demasiada frecuencia, pero necesita ser mucho más rápido cuando lo es.

¿Alguna idea?

Gracias de antemano

Actualización: Gracias a todas las sugerencias, que han probado varios de ellos y esto es lo que he encontrado. Reciclar el tiempo de apagado/retoques es peligroso porque no quiero que los hilos se queden sin hacer nada. Luego de una inspección adicional, el sitio se está precompilando, por lo que mi pregunta es: ¿por qué hay un tiempo inicial de activación para un servicio web?

este momento: El inclinarse hacia la sugerencia de la escritura de calentamiento por debajo de

Actualización: El servicio está siendo golpeado por un servidor web en una máquina diferente. Estamos viendo problemas solo con la solicitud inicial.

+0

Si pudiéramos conseguir que el punto en que no era necesaria una compilación, además siempre antes de pasar cosas para el directorio virtual, creo que sería óptimo. ¿Es eso posible? – xximjasonxx

+0

Si precompila, entonces su problema no es la compilación de IIS. El tiempo de inicio para la aplicación web es una cosa y la compilación es otra. – Vnuk

Respuesta

7

Un enfoque alternativo consiste en escribir un "guión de calentamiento" que simplemente ejecuta una página de tu aplicación Esto hará que el servidor funcione por usted y la próxima persona recibirá un golpe rápido. También puede establecer un proceso programado para ejecutar ese script ocasionalmente (por ejemplo, si programa el grupo de subprocesos para reciclar a las 4 a. M., Programe el script de calentamiento para que se ejecute a las 4:01 a.m.)

+3

Configuré el [control de tiempo de actividad de tagBeep] gratuito (http://tagbeep.com) para varios de mis sitios web. Esto tiene el efecto secundario de generar el calentamiento automáticamente, ya que revisa mis sitios web periódicamente cada 5 minutos para estar disponible. –

1

Trate de desactivar el reciclaje de aplicaciones en la configuración de la página o grupo de aplicaciones en el IIS.

IIS 6 (si no recuerdo mal): Haga clic derecho en AppPool -> pestaña "Rendimiento" -> Desactive la opción "Apagar el proceso de trabajo en el tiempo de inactividad"

IIS 7.5 Hay propiedad (parece ser una configuración de appPool también) que apaga la AppPool después de X minutos de tiempo de inactividad. El valor 0 es igual a "nunca se apagará"

Esperanza esto ayuda

+0

Gracias por esto, estuve en esta área, pero acabo de hacer que el tiempo de espera de reciclaje sea muy largo. No parecía una buena idea, porque creo que quiero que los hilos se reciclen para que IIS no se quede sin hilos. Pruebe esto, veamos si funciona – xximjasonxx

+0

Hicimos nuestra prueba esta mañana y la de inicio tocó más tiempo, 35 segundos para responder. Así que no está bien, gracias por la sugerencia, aunque – xximjasonxx

+0

¿Primera puesta en marcha después de la implementación o primer inicio después de un período de no uso? – citronas

2

¿Ha intentado utilizar aspnet_compiler en la carpeta de marco (por ejemplo,% SystemRoot% \ Microsoft.NET \ Framework \ v2.0.50727)?

Puede controlar el reciclaje de ASP.NET a través de la configuración en el grupo de aplicaciones. Si se recicla con más frecuencia que la configuración, entonces algo más está causando eso (por ejemplo, cambios en la web.config, etc.)

+0

¿Qué puedo buscar en la web.config que pueda estar contribuyendo a ¿el problema? – xximjasonxx

+0

Cualquier cambio en el archivo web.config causará que ASP.NET recicle el grupo de aplicaciones. Entonces, si hay un código que está alterando el archivo web.config que definitivamente lo haría. Sin embargo, el primer lugar para mirar es la configuración de reciclaje del grupo de aplicaciones. Si todo está desactivado y la aplicación se está reciclando, entonces algo más está obligando a restablecer el grupo de aplicaciones (o el propio IIS). – Thomas

+0

Correcto, pero lo que me preocupa es que si configuro el reciclado de hilo demasiado alto, es posible que me queden sin hilos. Pensamientos sobre ese punto? – xximjasonxx

1

En una posición anterior tuvimos problemas similares con los servicios de WCF cuando inicialmente almacenamos en spool, pasamos por alto al crear un programa simple que invocaría todos nuestros servicios web después de una implementación.

Usted podría también utilizar este mismo tipo de programa como un servicio de mantener vivo y simplemente hacer ping a los servicios de cada 5-10 minutos etc.

+0

Esto es algo que se sugirió, pero es un bandaid IMO. Lo cual no quiere decir que no termine usándolo, solo quiero probar otras cosas primero – xximjasonxx

3

Debería estar buscando realice la precompilación como parte de sus scripts de compilación/implementación.

Tener una actividad posterior al despliegue para solicitar programáticamente cada recurso web y activar la compilación me parece bastante tonto.

La respuesta de Thomas da el compilador, también hay una guía en MSDN, How to: Precompile ASP.NET Web Sites.

Si está utilizando MSBuild, vaya por el AspNetCompiler Task.

(probablemente habría hecho este comentario, pero aún no se me permite ... no lo suficiente como para zumo)

+0

Esto parece estar en la línea de lo que estaba buscando. Voy a intentarlo, gracias – xximjasonxx

+1

¿Afectará esto también a los servicios web?Ya uso esto en mis implementaciones usando proyectos de implementación web, pero independientemente de que esté precompilado, todavía hay un tiempo de carga inicial definido para la primera solicitud, que siempre me aseguro de realizar la primera solicitud después de la implementación, es más breve que no hacerlo. esta. –

+0

Aparentemente, mi sitio ya está precompilado, ¿qué ofrece entonces? ¿Por qué esta cosa tomando 35s para volver al golpe inicial? – xximjasonxx

Cuestiones relacionadas