Como todos sabemos, no es fácil implementar una aplicación que funcione 24 horas al día, 7 días a la semana. Una vez, uno de mis proyectos persistió durante más de 20 horas bajo una carga violenta y aun así murió heroicamente. Afortunadamente, ASP.NET e IIS nos brindan algunas funciones sencillas que nos permiten crear fácilmente aplicaciones .Net súper estables. Sin embargo, lo que es un poco desagradable es que los métodos de configuración en los sistemas Windows 2000 (versiones inferiores a IIS6.0) y Windows 2003 (IIS6.0) son diferentes.
Primero hablemos del sistema Windows 2000. Aquellos que estén familiarizados con ASP.NET deberían conocer el archivo machine.config. Está almacenado en el directorio %WindowPath%Microsoft.NetFramework%.NetVersion%CONFIG. Utilice cualquier editor de texto (por supuesto, el más popular es "Bloc de notas") para abrir el archivo y buscar la sección <processModel...>. ASP.NET controla el proceso de servicio ASP.NET (aspnet_wp.exe o w3wp.ext) según la configuración de esta sección. El código de la aplicación ASP.NET que escribimos se ejecuta en este espacio de proceso. Si está utilizando Framework 1.1, verá más de n propiedades en esta sección. Nos preocupan las tres siguientes, seguidas del signo igual son sus valores predeterminados:
timeout="Infinite"
idleTimeout="Infinite"
MemoryLimit="60"
No puede verlos en Framework 2.0, pero puede agregarlos manualmente.
Permítame traducir el significado de estos tres atributos. Después de ejecutarse continuamente durante el tiempo especificado por el tiempo de espera, reinicie el proceso del servicio ASP.NET. El valor predeterminado del tiempo de espera es infinito. Puede restablecerlo en el formato "HH:MM:SS. ", por ejemplo, timeout=24:00:00 significa reiniciar después de 24 horas; si nadie accede dentro del tiempo especificado por idleTimeout, reinicie el proceso de servicio ASP.NET. El valor predeterminado de idleTimeout también es infinito y el método de configuración es como arriba; si el porcentaje de memoria utilizada por el proceso de servicio ASP.NET con respecto a la memoria total del sistema excede la cantidad especificada por MemoryLimit, el proceso de servicio ASP.NET se reiniciará.
Comprenda que mediante la cooperación de estos tres atributos, el proceso de servicio se puede reiniciar sin saberlo, para que nuestra aplicación pueda continuar ejecutándose. Cuando digo esto, es posible que los lectores atentos hayan descubierto el problema. Cuando se reinicia el proceso de servicio, la sesión del cliente inevitablemente se perderá y la operación del usuario se interrumpirá. ¿Cómo podemos lograr "Dios no sabe y los fantasmas no saben"?
Este problema existe, pero su impacto se puede minimizar o incluso eliminar por completo mediante las siguientes medidas:
Primero, podemos establecer idleTimeout en un valor razonable; normalmente lo estableceré en 1,5-1,5 del tiempo de espera de la sesión 3 veces. Establezca el tiempo de espera en el límite superior que el programa puede persistir. Normalmente lo configuro en 24 horas. Esto obligará al proceso de servicio a reiniciarse cuando esté inactivo. Dado que no hay sesión en este momento, es imposible interrumpir la operación del usuario. Esta configuración es muy eficaz en un entorno de oficina de pequeñas y medianas empresas, porque básicamente no hay acceso fuera del horario laboral.
Por supuesto, el método anterior tiene grandes limitaciones y sólo puede funcionar en situaciones específicas. Si alguien continúa accediendo o reiniciando cuando la memoria excede el límite, la operación del usuario aún se verá interferida. Una solución definitiva es guardar el estado de la sesión en un proceso separado. En ASP.Net esto también es posible con una configuración sencilla.
Fuente: Sala de grabación del BLOG