2008-12-05 35 views
3

我们的网站有一个半奇怪的问题。当客户端通过多个IP的请求连接时ViewState解码失败

一致地,从1个匿名用户*发生以下错误:

异常类型信息:System.FormatException

异常消息:用于 一个基地-64字符数组无效长度。

经过调查,它出现在用户正在使用某种形式的负载平衡的防火墙,作为IIS日志示出了从2种不同的(但连续的)IP的发起请求。

从我可以确定,禁用'ViewStateMAC'应该可以解决这个问题。

我不确定,也没有任何方式与用户一起测试,我觉得有点不愿意继续。

有没有人遇到类似的问题?你是怎么处理它们的?

服务器的详细信息:

单个服务器(Win2003的)从一个单一的IP上运行。

更新:

从我可以判断,ViewStateMAC仅用于服务器端。我的问题是由于客户回传一个包含多个IP的单页。

*但是从IIS日志中确定的相同2个IP。用户也不是恶意的。

+0

你有没有找到解决方案? – JohannesH 2010-06-10 08:50:46

+0

@JohannesH:没有,也没有必要,在18个月前从这个项目中解脱出来。 – leppie 2010-06-10 09:11:29

回答

1

禁用viewstatemac不会解决问题; ViewStateMac故障发生在有多个Web服务器时,而不是,当用户来自多个IP地址时。

您是否正在使用viewstateuserkey?即使如此,这是一个很长的一步,因为你会得到一个不同的例外。

如果用户可以在一致的基础上重新创建它,让他们安装fiddler和记录请求直到它发生,然后让他们将它们发送给您,我会受到诱惑。然后从你身边重播它们,看看是否发生错误。

他们没有在Mac上使用IE浏览器是他们?由于表单字段长度的错误,这会破坏长视图状态。

3

嗨 - 我们发现在一个应用程序上出现异常数量的这些错误 - 由于客户需求和缺乏这些指导 - 使用过多的控件,特别是每页上的GridViews。

明显的罪魁祸首是viewstate的长度,在某些极端情况下是+ 5万字符长。由于这是一个仅由有限用户使用的管理应用程序,因此我们最初通过将视图状态移动到会话中来解决这个问题,使用此优秀(稍微过时的)文章中概述的解决方案的修改版本: http://msdn.microsoft.com/en-us/magazine/cc163577.aspx 但是,这给了我们使用后退按钮和/或标签式浏览的问题。

接下来,我们添加了一些额外的日志记录代码 - 并确认问题确实只是错误所说 - base-64编码的字符串必须具有可被4除的长度 - 并且当我们得到这个从未案子。 这个假设是,有些代理和/或防火墙我们只是在某些时候切断视图状态字符串。 然后,我们使用ASP.NET的ViewStateChunking将字段分割成几个隐藏字段 - 我们仍在监视此解决方案。

但是 - 我最近得到了有一个有效长度的viewstate字段的错误 - 但是__EVENTVALIDATION字段长度在这个上是无效的。

在发生这种情况的页面上,我们的字段中带有“+”号(电话号码) - 我目前正在调查是否所有这些都可能是由原始字符串的无效编码引起的(因为+符号有在base-64 endoded字符串中的特殊含义)。

相关问题