项目顺利完成,到客户现场进行系统测试(使用VS2005进行压力测试和响应测试),在系统日志中出 现如下错误:
[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.]
应用程序部署在NLB环境,访问MSCS集群的SQL Server 2005数据库,包括应用程序服务器、数据库服 务器、文件服务器等都可以做Failover。
在公司进行测试的时候,2.5倍于客户现场测试的压力下没有此问题,所以主要怀疑受性能影响。
<1>服务器端检查:客户服务器优于开发测试用服务器为双核酷睿(8 CPU),内存4GB,通过监 视程序没有出现IIS进程超过2GB情况(基本在700MB左右)。
<2>客户端检查:因为是金融公司所以客户端性能比测试用客户端性能差很多,使用VS2005进行 测试的时候,每台机器只能分配500个用户,CPU使用率达90%-100%。
怀疑由于客户端能力比较差,页面未能完全表示进行回发出现问题。通过查找资料,获得如下信息:
* 确保你没有使用Web Form
* 你使用了内置数据绑定控件(如GridView),并且由于绑定的数据中有主键或索引所以设置了 DataKeyNames属性。
* 你的页面表示的内容数据量大或加载时间比较长。
满足以上条件时,如果页面没有完全加载到客户端(IE)进行回发(Posting Back),你可能会看到 上面的异常信息。
此问题出现的原因是GridView等数据绑定控件使用DataKeyNames属性时,请求ViewState加密。此方法 会在页面</form>标签的上方追加<input type="hidden" name="__VIEWSTATEENCRYPTED" id="__VIEWSTATEENCRYPTED" value="" />标签。当请求的页面信息量比较大,相应时间比较长的时候 ,客户端可能还没有完全表示就可以通过页面的按钮触发服务器端回发(服务器端控件操作)。因为回发 的内容不包括加密标签,回到服务器端进行验证的时候就会失败。(此问题不仅在测试软件的情况下会出 现,经测试,在客户使用系统的时候此问题也可能出现。)
解决此问题的方法是在web.config中关闭事件验证和ViewState加密属性的开关,如下:
<pages enableEventValidation="false" viewStateEncryptionMode ="Never" />
但请注意关闭开关引起的安全问题,稍后会发文讨论Event Validation和ViewState Validation等安 全性设定内容的实质,讨论使用场景。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索问题
, 客户端
, 服务器
, 测试
, 页面
, vs2015 异常
, validation
, 异常处理:ensure
服务器端mac
validation failed、failed re validation、经营异常名录管理办法、红米充电异常解决办法、cf网络异常的解决办法,以便于您获取更多的相关知识。