Thomas Bandt

Über mich | Kontakt | Archiv

Fehler bei der Validierung von ViewState-MAC

Mir flatterte zuletzt gehäuft eine Fehlerbenachrichtigung einer Anwendung ins Postfach, die den folgenden Fehlertext enthielten:

Fehler bei der Validierung von ViewState-MAC. Wenn diese Anwendung von einer Webfarm oder einem Cluster gehostet wird, stellen Sie sicher, dass die <machineKey>-Konfiguration den gleichen validationKey und Validierungsalgorithmus angibt. AutoGenerate kann in einem Cluster nicht verwendet werden.

Die Generierung eines MachineKeys brachte keine Besserung, zumal die betroffene Anwendung zwar hinter einem LoadBalancer aber nicht in einer WebFarm, sondern nur auf einem einzelnen Server läuft. Dazu kam, dass der Fehler sich in manuellen Tests absolut nicht reproduzieren ließ und auch nur sporadisch alle paar Tage einmal auftrat.

Heute bin ich dem Rätsel dann aber auf die Spur gekommen: Der Fehler hatte mit einem Mac nicht wirklich etwas zu tun, viel mehr mit einem verwendeten Control und einer Eigenschaft: dem GridView und der DataKeyNames-Eigenschaft.

Verwendet man diese Eigenschaft, dann muss der Viewstate verschlüsselt werden. Das hat zur Folge, dass ASP.NET vor dem schließenden <form />-Tag ein HiddenField setzt:

<input type="hidden" name="__VIEWSTATEENCRYPTED" id="__VIEWSTATEENCRYPTED" value="" /> 

Und ist die Seite nun etwas schwerfällig und lädt noch, während der Benutzer bereits wieder eine Aktion auslöst, also einen PostBack über einen Button zum Beispiel, dann kracht es. Das geht auch ganz schnell, wenn man bsp. ein ASP.NET AJAX-UpdatePanel einsetzt, was den betreffenden Teil der Seite ja komplett ohne Reload neu lädt - da merkt man gar nicht, dass der Prozess noch nicht abgeschlossen ist, bevor man den Button anklickt.

Die einfachste Lösung ist der Verzicht auf die DataKeyNames-Eigenschaft, der in meinem Fall möglich war, da es sowieso nur ein dummey Copy&Paste-Überbleibsel gewesen ist. Kann man nicht darauf verzichten, weil man z.B. die Bearbeiten-Funktionen des GridViews benutzen möchte, gibt es weitere Wege - die man in diesem wunderbaren und ausführlichen Blogpost zum Thema nachlesen kann.

Kommentare

  1. Thomas goes .NET schrieb am Montag, 27. April 2009 15:01:00 Uhr:

    "Fehler bei der Validierung von ViewState-MAC. Wenn diese Anwendung von einer Webfarm oder einem Cluster gehostet wird, stellen Sie sicher, dass die -Konfiguration den gleichen validationKey und Validierungsalgorithmus angibt. AutoGenerate kann in ei ...
  2. WoAx schrieb am Montag, 15. Oktober 2012 16:12:00 Uhr:

    Danke für den Hinweis.


« Zurück  |  Weiter »