使用Autogenerate键在ASP.NET中查看状态MAC失败错误,而不是在服务器场或群集上

时间:2017-04-13 19:22:38

标签: asp.net vb.net iis-7 windows-server-2008-r2 machinekey

错误是: " viewstate MAC验证失败。如果此应用程序由Web场或群集托管,请确保配置指定相同的validationKey和验证算法。 AutoGenerate不能在群集中使用。"

  • 我不是在Web场或群集上托管。

  • 应用程序有大约100个用户。

  • 只有1位用户收到此邮件。

  • 用户仅在IE11中收到此错误消息,而不是在使用其他浏览器(Chrome,Firefox)时,这会让我相信这与浏览器相关。

  • 在无插件模式下运行IE11同样的错误。

  • 自动生成IIS中的计算机密钥默认值不受影响。

我的目标是找出造成这种情况的原因,而不只是快速修复。

如果有人发生过同样的情况,可以指出我正确的方向,我们将不胜感激。

2 个答案:

答案 0 :(得分:0)

我无法弄清楚造成这个问题的原因,但我设法解决了这个问题。

在IE11开发人员工具(F12),模拟选项卡中,我将文档模式从Edge切换到IE10,然后再切换回Edge。不开玩笑,这解决了这个问题。

有时只是关闭然后再修复问题。如果有人知道为什么这可以解决一些问题,欢迎提出更多意见。感谢。

答案 1 :(得分:0)

据我所知,ASP ViewState使用客户端/服务器MAC地址作为加密ViewState数据的默认加密密钥。这是为了确保最初加载网站的客户端 - 服务器对在所有后续连接中是相同的。如果失败,则假设服务器端的MAC地址不同,因为托管网站的群集或服务器场在提交网页时不会将客户端重新连接到完全相同的服务器,就像加载时一样。这就是为什么指定密钥会覆盖使用两个MAC地址作为密钥的需要。但是,这可能是也可能不是。这是一个误导性错误标题假设错误的根本原因。

如果你碰巧在ASP中使用MasterPage,IE的默认值是IE.master,否则它是所有其他浏览器的Default.Master。如果它位于两个不同的文件夹中,则它们可以有两个不同的web.config文件,指定< machineKey>不同(或根本没有)。

在MSVS中,还有Debug vs Release web.config文件,它们可能有不同的< machineKey>设置。

我也遇到过PLESK托管问题。即使没有负载平衡,冗余串联处理,服务器群集或服务器场或代理,此托管软件在指定web.config文件时也有一些独特的夸克。如果上传的web.config文件出现问题,则只要更改了Web访问的设置,就会覆盖这些文件。 (这会将我的web.config文件覆盖为自动生成的文件)。同样,PLESK的默认会话超时时间也不同(5比20分钟......如果这很重要)。

在不是专用服务器的webhost上,我想知道当多个ASP应用程序指定< machineKey>时是否存在任何异花授粉。这将取决于IIS / LASP / PLESK类型托管软件正在运行的具体情况。

由于存在许多不同的加密协议(SHA1 | MD5 | 3DES | AES | HMACSHA256 | HMACSHA384 | HMACSHA512),我想知道您正在使用哪一个并且IE在该协议中存在问题。

我将提供这些可能性,并让其他人插话或揭穿。我必须承认,ASP的ViewState加密烟雾和镜子一直是我生存的祸根。