2010-11-05 21 views
0

Je travaille sur une application de boutique en ligne en utilisant des formulaires Web C# 3.5 et MS SQL Server 2008. La solution fonctionne très bien sur VS2010, en utilisant le serveur Web intégré. Ensuite, je télécharge le projet dans un sous-domaine de test et la page d'accueil se charge; dès que je clique sur un lien de menu, j'obtiens ceci: La validation de viewstate MAC a échoué. Cela ne s'est pas produit au début de mon projet et je n'ai rien construit de bizarre ou de bizarre, des trucs CRUD normaux avec un concept de structure de menu variable en session. Je suis perplexe et maintenant je demande l'aide du pool génial de stackoverflow. Aucune suggestion?Erreur ViewState sur le serveur Web partagé

Je coller les informations de trace de la pile de la page d'erreur:

[ViewStateException: Invalid viewstate. 
Client IP: omitted by user 
Port: 53604 
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; OfficeLiveConnector.1.5; OfficeLivePatch.1.3) 
ViewState: /wEPDwULLTEwMDUyNjYzMjhkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYMBRJjdGwwMCRpbWdCX05hcGtpbnMFFmN0bDAwJGltZ0JfVGFibGVjbG90aHMFEmN0bDAwJGltZ0JfUnVubmVycwUSY3RsMDAkaW1nQl9QaWxsb3dzBRFjdGwwMCRpbWdCX0Fwcm9ucwUQY3RsMDAkaW1nQl9XcmFwcwURY3RsMDAkaW1nQl9RdWlsdHMFEmN0bDAwJGltZ0JfSG9saWRheQUUY3RsMDAkaW1nQl9PdXRlcndlYXIFEmN0bDAwJGltZ0JfSnVkYWljYQUTY3RsMDAkaW1nQl9LaWRTdHVmZgUVY3RsMDAkaW1nQl9CYXJnYWluQmlufgoWd3FjkchVtkJTfTl/dw7C/Ks= 
Referer: http://omitted by user/ 
Path: /Default.aspx] 

[HttpException (0x80004005): Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.] 
System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) +106 
System.Web.UI.ViewStateException.ThrowMacValidationError(Exception inner, String persistedState) +14 
System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) +237 
System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState) +4 
System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState) +37 
System.Web.UI.HiddenFieldPageStatePersister.Load() +207 
System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +105 
System.Web.UI.Page.LoadAllState() +43 
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +6785 
System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +242 
System.Web.UI.Page.ProcessRequest() +80 
System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) +21 
System.Web.UI.Page.ProcessRequest(HttpContext context) +49 
ASP.default_aspx.ProcessRequest(HttpContext context) in c:\windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\2e1de3e2\ec16856d\App_Web_default.aspx.cdcab7d2.2xg-fqvv.0.cs:0 
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181 
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75 

espérons que cette aide. J'essaie d'attirer l'attention de mon hébergeur, mais ils ne répondent pas à mon ticket. Je veux vraiment les appeler, mais je vais retenir pour le moment.

Robert

Répondre

0

Cette question a été créé par la société d'hébergement Web mise à niveau vers réSEAU 4.0 et mon projet local dev cible 3.5 sp1. J'ai résolu le problème de viewstate en faisant correspondre le framework cible et ça fonctionne très bien maintenant. Juste une suggestion pour vérifier la version dans le cadre de tous les efforts de dépannage.

merci pour l'aide, stackoverflow genius pool.

+0

Est-ce correct de répondre à votre propre question? Je viens de perdre 2 points, eh bien. Comme j'ai mille à abandonner. Ha. Ce site est très utile chaque fois que je suis perplexe. – rjsteward

1

Je suis perplexe et je demander de l'aide de la piscine de génie stackoverflow. Aucune suggestion?

Je propose de fixer le machineKey sur web.config, par exemple:

<machineKey 
validationKey="NXBXUKMF19UN5SCJX1SF5XXTR0MK4EYAMBJ 5GYRPAGMBAAGGADANBGKQHKIG9W0B" 
decryptionKey="RNNWWNSU7WJBAMQ8R4XAOMIH7SPRZPF7LHI MRHWVIF2AB7NA6AII7OXYE2JSX7ZM" 
validation="SHA1"  
/> 
+0

Une référence supplémentaire peut être trouvée ici. http://msdn.microsoft.com/fr-fr/library/ff649308.aspx#paght000007_webfarmdeploymentconsiderations. Voici un outil en ligne que vous pouvez utiliser pour générer une clé machine. http://aspnetresources.com/tools/machineKey – pitx3

+0

Merci pour l'aide. J'ai ajouté l'attribut enableMACviewstate = "false" à l'élément pages du fichier web.config. Cela a corrigé le problème. Il semble y avoir un bug interne AspNet qui ajoute à ce problème. Je ne sais pas si le serveur d'hébergement Web est en cluster ou pas, mais le problème est parti et j'espère que je n'ai pas ouvert de problème de sécurité avec ce changement. Merci encore, Robert. – rjsteward

+0

@rjsteward Ce n'est pas correct le problème :) arrête juste la validation. Oui vous ouvrez un problème de sécurité, maintenant je ne sais pas ce que vous publiez, peut-être pas si critique et ce sont des pages simples (sans base de données et données critiques), sinon, essayez de corriger le problème et de valider à nouveau viewstate. – Aristos