El error Validation of viewstate MAC failed error podemos encontrárnoslo en varios escenarios, como por ejemplo, en una Granja Web balanceada (ej: por NLB, NetScaler, etc.) en la que está navegando un usuario por una Página Web compleja (ej: con múltiples controles de servidor, requiriendo de PostBacks y del mantenimiento del estado de la página por el navegador) justo cuando se produce un Failover. A partir de dicho Failover, la navegación del usuario (incluyendo el siguiente Postback) empieza a realizarse a través de otro Servidor Web de la Granja, obteniéndose este mensaje.
Esta situación puede producirse porque, por defecto, el estado de la página (ViewState) se encuentra cifrado con una clave generada aleatoriamente por el Servidor. Esto implica que mientras un usuario está navegando por nuestra Aplicación Web utilizando siempre el mismo Servidor Web (algo que depende de cómo esté configurado el balaceo de red), todo funcionará bien. Sin embargo, después de un Failover, será otro Servidor Web el que tendrá que continuar procesando las peticiones del usuario. Sin embargo, este Servidor Web utilizará una clave diferente para cifrar/descifrar el estado de las páginas del usuario, lo que puede producir que en el siguiente PostBack la petición HTTP finalice en un error como el descrito.
No todas las Aplicaciones Web pueden sufrir este error, aunque sí es cierto que muchas lo sufrirán. Una forma de solucionarlo, es configurar la clave machineKey en el Web.Config con el mismo valor en todos los Servidores Web de la Granja, de tal modo que todos los Servidores Web utilicen la misma Clave. En este escenario, en caso de un Balanceo, el nuevo Servidor Web que reciba las peticiones del usuario, será capaz de cifrar/descifrar el estado de la página (ViewState) del mismo que lo hacía el Servidor Web original, evitando este error.
Por poner un ejemplo de una Aplicación Web en la que debemos configurar la clave machineKey del Web.Config es en una Granja Web de Reporting Services (y eso que Reporting Services no utiliza IIS). Así, en una instalación de Reporting Services en Modo Nativo, deberíamos modificar el Web.Config del ReportServer para configurar la clave machineKey.
Para seguidamente, configurar también la clave machineKey en el Web.Config del ReportManager.
Y con esto hemos acabado. Fácil y sencillo.
Por último, antes de finalizar, aprovecho para incluir varios enlaces de interés, para quien desee ampliar información:
Poco más por hoy. Como siempre, confío que la lectura resulte de interés.