2009-04-29 17 views
7

He desarrollado una prueba de sitio web en localhost Cassini y siempre ha funcionado bien, ahora cuando implemento en mi servidor web intermitentemente Obtenga el siguiente error:¿Qué significa una excepción "No se puede validar datos" en System.Web.Configuration.MachineKeySection.GetDecodedData indicar

Global.Application_Error Error: Exception occurred during request: http://....blah.aspx Unable to validate data. at System.Web.Configuration.MachineKeySection.GetDecodedData(Byte[] buf, Byte[] modifier, Int32 start, Int32 length, Int32& dataLength) at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) HttpApplication.RaiseOnError => EventHandler.Invoke => Global.Application_Error

Esto está siendo capturado en mi global.asax. He buscado pero no puedo encontrar la causa. Esta excepción se lanza en formularios web extremadamente simples y pequeños. El sitio no está alojado dentro de una webfarm.

Parece que 2 páginas causan este error intermitentemente y una de ellas almacena un bool en el ViewState, pero no se modifica aparte de eso.

¿Alguien ha encontrado esto antes?

Respuesta

11

http://dotnetcoderoom.wordpress.com/2008/11/07/unable-to-validate-data-aspnet-error/

Causa: La razón fundamental de esto es la diferencia de tecla mientras cifrar y descifrar los datos de estado de vista. Supongamos que asp.net renderiza una página con key1 y guarda el estado de la página en estado view, mientras tanto la clave de asp.net cambia a key2, ahora cuando ocurra algún evento del lado del servidor en la página, viewstate se descifrará y este error ocurrirá como el estado de vista anterior ahora no es válido debido a una clave de cifrado diferente.

Puede ocurrir cuando abre una página durante bastante tiempo y luego realiza algunos eventos sobre eso.

Solución Solucione la clave en su archivo web.config, de modo que solo se utilice una clave para cifrar y descifrar los datos del estado de visualización.

Para obtener más información, visite:

http://www.experts-exchange.com/Programming/Programming_Languages/Dot_Net/ASP_DOT_NET/Q_21321364.html

http://support.microsoft.com/default.aspx?scid=kb;en-us;Q312906

+0

+1 Buena respuesta: aquí hay una implementación pública del código en la página de tecnología: http://www.developmentnow.com/articles/machinekey_generator.aspx –

+0

He agregado una clave de máquina en mi web.config, y no hay errores todavía, así que con suerte esta es la solución –

+0

No dude en marcarlo como la solución correcta;) – StevenMcD

3

Trate de añadir una clave de máquina a su web.config para ver si se ha solucionado el error

http://aspnetresources.com/tools/keycreator.aspx

+1

He agregado una machineKey en mi web.config, y todavía no hay ningún error, así que con suerte esta es la solución –

8

I se estaba volviendo "incapaz de validar los datos System.Web.Configuration.MachineKeySection.Enc" ryptOrDecryptData "en mi aplicación web asp.net. Limpié mis cookies y la excepción se detuvo.

+0

Definitivamente estás en algo. Para mí, lo que sucedió fue que cambié la ruta de un sitio web de IIS a un sitio diferente que utiliza la misma solución de formularios ASP.NET y las mismas cookies basadas en el dominio PERO una combinación de teclas de máquina diferente en web.config. Entonces pensó que la cookie era para el NUEVO sitio, pero no fue así. Se ahogó al descifrar los datos cifrados por el sitio anterior. Booya! Gracias por el consejo. –

0

tuvo el mismo error. El machinekey y decryptionKey era la misma en todos web.config pero algunos web.config tenido

<add key="aspnet:UseLegacyEncryption" value="true" /> 
    <add key="aspnet:UseLegacyFormsAuthenticationTicketCompatibility" value="true" /> 

y otros no lo hicieron. Se eliminó esta clave de todos los web.config. No creo que la solución sea eliminar la clave sino ser el mismo en todos los web.config

0

En mi caso tenía dos aplicaciones web (una era muy vieja y otra que acababa de crear) y, a pesar de tener mismos tickets de configuración de clave de máquina generados en una aplicación no se podían usar en otra. Esto se solucionó agregando compatibilityMode="Framework20SP2" como argumento para el nodo machineKey en web.config en una aplicación más nueva.

Cuestiones relacionadas