[Programacion] Tiempo de logueo en ASP

Tengo una aplicación desarrollada en ASP.NET:2.0 por un tercero que le he detectado algún problema.

Primeramente el usuario se loguea en el sistema.
Después debe rellenar un formulario, pudiendo añadir algún fichero si así lo desea y ésto es enviado.

Un problema que he localizado es que si el usuario se loguea y pasan aproximadamente 20 minutos, después NO puede realizar el envio del formulario, teniendo el siguiente error:

Error de la validación del estado de vista MAC. Si un clúster o una batería de servidores Web alojan esta aplicación, asegúrese de que la configuración <machineKey> especifica la misma validationKey y el mismo algoritmo de validación. AutoGenerate no se puede utilizar en un clúster.

<ViewStateException: Estado de vista no válido.
   Client IP: IP_DEL_CLIENTE
   Port: 40190
   User-Agent: xxx
   ViewState: valor_base64
<HttpException (0x80004005): Error de la validación del estado de vista MAC. Si un clúster o una batería de servidores Web alojan esta aplicación, asegúrese de que la configuración <machineKey> especifica la misma validationKey y el mismo algoritmo de validación. AutoGenerate no se puede utilizar en un clúster.

System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) +153
   System.Web.UI.ViewStateException.ThrowMacValidationError(Exception inner, String persistedState) +14
   System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) +237
   System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState) +4
   System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState) +37
   System.Web.UI.HiddenFieldPageStatePersister.Load() +207
   System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +199
   System.Web.UI.Page.LoadAllState() +43
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +6785
   System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +242
   System.Web.UI.Page.ProcessRequest() +80
   System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) +21
   System.Web.UI.Page.ProcessRequest(HttpContext context) +49
   ASP.gui_pagina_incidencia_aspx.ProcessRequest(HttpContext context) in c:\win\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\aplicacion\4a57210c\90e45676\App_Web_o4bw9brq.3.cs:0
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75


He pensado que tal vez hay alguna manera de controlar el tiempo de sesión:
Así, me he encontrado con que por defecto en ASP el tiempo es de 20 minutos.

He añadido el timeout de 8 horas con la intención de que la sesión sea más larga y no se mostrará el error, pero parece que no hay manera.

<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="480" />


Por otro lado, alguien se loguea a la aplicación y se rellena el formulario la instante (o sin mucha demora de tiempo, menos de 20 minutos) no muestra problemas y la tarea se realiza correctamente.

¿Alguien tiene alguna experiencia similar?

Un saludo ;)
A ver si no me he perdido y es esto lo que dices tu. Te da problemas de que te cumple la sesión en ASP no? Creo que para aumentar el tiempo de sesión tiene que ser desde el Administrador de IIS del Panel de control, lo abres y en la Vista Características, abres con doble clic abajo donde pone ASP, en la ventana nueva abajo del todo expande donde pone Propiedades de la sesión, y a continuación cambias el valor de Tiempo de espera por lo que tu veas, Aplicas los cambios y reinicias el servicio.
frank1986 escribió:A ver si no me he perdido y es esto lo que dices tu. Te da problemas de que te cumple la sesión en ASP no? Creo que para aumentar el tiempo de sesión tiene que ser desde el Administrador de IIS del Panel de control, lo abres y en la Vista Características, abres con doble clic abajo donde pone ASP, en la ventana nueva abajo del todo expande donde pone Propiedades de la sesión, y a continuación cambias el valor de Tiempo de espera por lo que tu veas, Aplicas los cambios y reinicias el servicio.


Gracias por la respuesta.

He modificado Servicios > Propiedades de la Sesión[i] > [i]Tiempo de Espera que se trata de que se cumple el tiempo de inicio de sesión; pero el error sigue apareciendo. (Reiniciando la aplicación).

Mostrando el mismo error:
[HttpException (0x80004005): Error de la validación del estado de vista MAC. Si un clúster o una batería de servidores Web alojan esta aplicación, asegúrese de que la configuración <machineKey> especifica la misma validationKey y el mismo algoritmo de validación. AutoGenerate no se puede utilizar en un clúster..


En el Visor de Eventos también muestra una información respecto a ASP a la hora de realizar la acción:
4009
   Error de verificación del estado de vista. Motivo: la vista de estado suministrada falló en la comprobación de integridad.


Puede que el problema este por otro lado :(
Pues nunca me ha dado ese error a mi, la verdad. Prueba con estas dos posibles soluciones:

1) http://www.asprunner.com/forums/topic/3379-validation-of-viewstate-mac-failed/

2) Generar key http://www.developerfusion.com/tools/generatemachinekey/

A ver si hay suerte...
Una solución podría ser que programaras en javascript un intervalo que cada 5minutos por ejemplo lance una visita a la web via AJAX. De esta forma evita que la sesión cumpla.
Al final se ha podido solucionar sin tocar código y modificando la configuración en el servidor tal parecido a lo que recomendaba @frank1986.

Ir a la aplicación puede que pertenezca a un Grupo de Aplicaciones “aplicacion(domain)(2.0)(pool)”.
“Configuracion avanzada” > “Modelo de Proceso” > “Tiempo de inactividad (minutos)”.

Saludos ;)
No si ya decía yo xDDDD Más que nada porque tenemos uno de los servidores montado con IIS y me sonaba a eso.

[plas]
6 respuestas