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