Cuando estaba publicando Federico en producción un proyecto (esto quiere decir que esta en etapas finales, hito importante en cualquier proyecto) se le presento el siguiente mensaje 😉
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.
English…
Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.
Si bien al único que le sucedió algo similar hace unos meses era a Ruben, aqui dejo plasmado las soluciones… la primera es la sugerencia del chef! pero por pagina no de todo el sitio
Si quieres puedes tener un seguimiento de todos los issues del view-state que están documentados en Microsoft Support, ademas hay sugerencias de como buscar estos issues:
- Tracking down ASP.NET view-state issues in the Knowledge Base
http://support.microsoft.com/?scid=kb;en-us;871041
Porque sucede esto?
Hay varias razones y seguramente (por la Ley de Murphy) la que le ocurre a uno no es nada de este listado, es decir no es un listado definitivo solo algunos tips de sucesos, pero si tienes alguno dímelo a través de un comentario en este articulo
- Si tenemos una granja de servidores web. Donde todas compartan la misma clave para encriptar el viewstate ya que por default la clave es autogenerada. La puedes autogenerar
Aquí nos convendría leer un poco la implementación , mas info: - Suele suceder también cuando utilizamos la transferencia del contexto con Server.Transfer y la pagina que recibe los datos no puede “leer” los controles (PreviousPage) que no pasan la validación.
Es decir el viewstate encriptado solo puede ser enviado a la misma pagina - Login? ..también (muchos “tambien”) he dado con este articulo donde luego de instalar NET 3.5 SP1 puedes sufrir este problema.
Esto porque en ASP.NET 3.5 tenemos la propiedad Action en el HTMLForm- «Validation of viewstate MAC failed»-.NET 3.5 SP1 Breaking Change (por SwathiS)
- Documentado aquí (en un foro)
Known Issues / Breaking Changes for ASP.NET in .NET 3.5 Service Pack 1
- También es posible que suceda cuando utilizamos controles que utilizan DataKeyNames para guardar campos claves (o lo que necesitemos) (Ej: GridView, DetailsView o FormView)
Mas info: - Cuando paginas “gigantes” (o no) se cargan lentamente… y se le permite al usuario realizar acciones antes de la carga completa.
Aqui la solucion de Tom de deshabilitar el formulario por javascript me gusto por lo sencillo
NOTA: Por favor asegúrate que tu pagina no esta cacheada por el explorador, porque puede ser que se este enviando el viewstate “añejo”, y por eso te este dando este error.
Soluciones
Si es un caso aislado o por ejemplo estas en una intranet que pocos usuarios van a utilizar y no necesitas esa seguridad.. entonces puedes:
Solución 1:
En la pagina que requerimos deshabilitamos este cifrado.
<%@ Page Language=»..» EnableViewStateMac=»False»%>
Esto es bueno cuando tenemos que enviar el postback hacia otra pagina.
Solución 1.1:
Ídem al anterior pero lo hacemos para todo el sitio desde el web.config.
Esta alternativa hace que nuestra nivel de seguridad disminuya así que a tenerlo en cuenta (si es publico no creo que se conveniente, en cambio en una intranet habría que evaluarlo)
<pages enableViewStateMac=»false» />
enableViewStateMac: Atributo Boolean opcional.
Especifica si ASP.NET debe ejecutar un código de autenticación de mensajes (MAC) en el estado de vista de la página cuando el cliente la devuelva. Si el valor es True, se comprueba el estado de vista cifrado para asegurarse de que no se ha manipulado en el cliente.
El valor predeterminado es True.
Mas info sobre esta propiedad sigue el post de Carlos Zanini
Solución 2
<pages viewStateEncryptionMode =»Never» />
viewStateEncryptionMode: Atributo ViewStateEncryptionMode opcional.
Especifica el modo de cifrado del estado de vista. La propiedad ViewStateEncryptionMode reemplaza este atributo, que se establece en el archivo de configuración.
Valores: Always, Auto, Never
El valor predeterminado es Auto
Solución 3
Aqui puede ser que se recicle el Pool de Aplicaciones del IIS asi que la solucion by Microsoft
- Ajústese las configuraciones en los grupo de aplicaciones para que sea menos probable que el reciclaje se produzca en períodos máximos.
- Utilice una clave específica en el machine.config para impedir generación automática de claves a cada inicio de proceso
- Sólo realice el postback a la misma página ASPX
- Desactive servidor de seguridad y software de antivirus
Según leemos aquí:
- Error de Viewstate Válido intermitente en páginas Web ASP.NET
http://support.microsoft.com/?scid=kb;es;555353&x=13&y=15
Enlaces
- Elemento pages (Esquema de configuración de ASP.NET)
Define globalmente los valores de configuración específicos de la página, como las directivas ASP.NET para las páginas y los controles que están dentro del ámbito del archivo de configuración.
http://msdn.microsoft.com/es-es/library/950xf363(VS.80).aspx - ViewStateEncryptionMode (Enumeración)
Especifica si se cifra la información de estado de vista.
http://msdn.microsoft.com/es-es/library/system.web.ui.viewstateencryptionmode(VS.80).aspx
Espero que les sirva de ayuda o guía.