2010-11-05 99 views
0

我正在使用C#3.5 Web窗体和MS SQL Server 2008的网络商店应用程序。该解决方案使用内置的Web服务器在VS2010上正常运行。然后我将项目上传到测试子域,然后加载主页;只要我点击一个菜单链接,我得到这个:viewstate MAC验证失败。这在我的项目早期并没有发生,我也没有用会话变量菜单结构概念构建任何奇怪或奇怪的正常CRUD内容。我很难过,现在我寻求来自stackoverflow天才池的帮助。有什么建议么?共享Web服务器上的ViewState错误

我从粘贴错误页面的堆栈跟踪信息:

[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 

希望这会有所帮助。我试图让我的网络托管公司的注意力,但他们没有回答我的票。我真的很想打电话给他们,但我现在会克制。

罗伯特

回答

0

此问题是由网站主办公司升级到4.0 ASPNET和我的本地开发项目的目标是3.5 SP1创建。我通过匹配目标框架解决了viewstate问题,现在它工作得很好。只是建议检查版本作为任何故障排除工作的一部分。

感谢您的帮助,stackoverflow天才池。

+0

可以回答你自己的问题吗?我只输了2分,哦。就像我有一千个放弃。哈。每当我陷入困境时,这个网站都非常有帮助。 – rjsteward 2010-11-08 14:05:51

1

我很为难,现在我寻求计算器天才池的帮助。有什么建议么?

我建议将machineKey在web.config中,例如:

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

可以在此处找到其他参考。 http://msdn.microsoft.com/en-us/library/ff649308.aspx#paght000007_webfarmdeploymentconsiderations。这里有一个你可以用来生成一个机器键的在线工具。 http://aspnetresources.com/tools/machineKey – pitx3 2010-11-06 01:46:24

+0

感谢您的帮助。我在web.config文件的pages元素中添加了enableMACviewstate =“false”属性。这纠正了这个问题。似乎有一个内部AspNet错误增加了这个问题。我不知道虚拟主机服务器是否集群,但问题没有了,我希望我没有打开这个变化的任何安全问题。再次感谢,罗伯特。 – rjsteward 2010-11-07 15:38:28

+0

@rjsteward这不正确的问题:)只是停止验证。是的,你打开一个安全问题,现在我不知道你发布了什么,也许不是那么重要,他们是简单的页面(没有数据库和关键数据),如果没有,尝试纠正问题并再次验证视图状态。 – Aristos 2010-11-07 16:06:56