无法在NLB上加载视图状态

问题描述 投票:4回答:4

我们有一个系统,它可以在每次发回信息时动态创建页面的控件,并使用浏览器的历史记录等进行处理。

问题是,在生产服务器(NLB上的2个节点)上,我们随机地进入不同的网点,没有发现相关性,加载视图状态失败,控制树可能是不同的错误。但是,从未在我们的登台服务器上使用完全相同的代码(NLB设置与生产相同)。

我基本上在这一点上排除了它的代码,因为它根本不在开发/登台或本地环境中发生,在生产中它相当频繁。这使我不敢相信我们在某处存在配置错误。

我已经在登台和生产中使用的web.config中设置了硬编码的计算机密钥,并且会话在MSSQL上得到支持。

[如果有人提出建议,让我朝正确的方向前进,那将是很棒的,我们整个开发团队都会为此感到沮丧。

我们的网络配置位于pastbin:http://pastebin.com/m2kRTd0k

c# asp.net viewstate nlb failed-to-load-viewstate
4个回答
1
投票

以下是您可以检查的几件事:

  • 您确定已编辑的web.config文件是使用的文件吗?尝试在其中添加语法错误,然后查看是否出现错误。
  • 检查舞台环境中未配置粘性IP
  • 检查您的环境是否处于相同的补丁程序级别,可能一个环境的默认值与另一个环境的默认值不同。
  • [这两个环境所在的网络基础架构也可能有所不同

0
投票

我在公司中有一个动态调查表,该表完全由数据库驱动。

由于问题类型太多(例如,是/否,基于值,多项选择,滑块,多级下拉菜单等...,我们必须动态创建表单。

我们会在生产中遇到问题,但不会在开发环境或质量保证环境中遇到与您类似的问题;但是我们的问题是代码。当我们将应用程序推向生产环境时,与我们在dev / qa中所能完成的场景相比,有更多的用户正在运行着更多的场景。

[每当我们看到'无法加载viewstate时,执行以下两项操作之一通常都会解决问题:

  • 仅在INIT阶段动态创建所有控件。无需过多考虑即可在此处完成ViewState的正常工作。在INIT完成后加载ViewState,并在PRERENDER完成后保存。我们可以在LOAD阶段之前创建控件,但是可能会有一些细微差别。 (http://msdn.microsoft.com/zh-cn/library/ms178472.aspx#general_page_lifecycle_stages)]]

  • 关闭AJAX,看看是否可以解决(通常是罪魁祸首)。如果此问题得以解决,那么我们只需检查是否存在导致页面更改其布局的AJAX回发。 AJAX调用可能会做一些简单的事情,例如使控件不可见,或使用新ID重新呈现控件,从而导致下一次下一次正常回发来检测控件树中的更改。如果必须通过ajax使控件不可见,则只需添加attribute('display','none')即可。完成更改后,我们重新打开AJAX。


0
投票

这种情况是否会在各种浏览器中发生?有较旧版本的Safari和某些代理服务器,当将ViewState传递回服务器时,它们会截断ViewState。


0
投票

我们有一个非常相似的问题:在负载平衡的生产服务器上发生“无法加载viewstate”错误,但是我们无法在本地/开发服务器上重现它(即使我们添加了其他实例以在开发中实现负载平衡网站)。>

最后,我们发现由于部署过程中的错误,其中一台生产服务器的版本与另一台服务器的版本不同,并且当用户在一个服务器上启动并继续使用另一台服务器(未配置Sticky IP时,发生视图状态错误。

© www.soinside.com 2019 - 2024. All rights reserved.