[ASP.NET] Error: Validation of ViewState MAC failed

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:

 

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

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í:

 

 

Enlaces

 

Espero que les sirva de ayuda o guía.

Crossposting desde mi blog en Geeks.ms: http://geeks.ms/blogs/fernandezja

Published 12-03-2009 10:56 por Jose A. Fernandez