- 热门文章:
- · 在web开发中的三个层次使用事务
- · (论坛答疑点滴)如何得知调用当前方法的方法名?
- · (论坛答疑点滴)用户控件动态加载PostBack后的问题
- · Implementing Cross-Browser Compatible Smart Navigation Features
- · ASP.NET立即上手教程 13(完)
- · 关于多层repeater,datagrid,datalist嵌套的示例
- · Display hierarchical data with TreeView
- · 怎么后台添加CheckBoxList并且得到选择结果
- · HTTP Downloader for Updater Application Block 2 (GotDotNet)
- · HOW TO:从资源管理器中拖放文件到控件
- · dataGrid在页面拖动(用表头),不刷新页面
- · winform下如何检测你一个给定的网址(Ull),是否可访问?
一个负载均衡问题的解决过程
环境说明:
开发平台是DOTNET B/S .NET Framework 1.1
正式WEB服务器和测试机,均为win2003
原有一个主网站,在六台WEB服务器做负载均衡。运行比较稳定。
现新开发一个子站,将布署在另三台WEB服务器上做负载均衡。这个负载均衡设置类似主网站的设置。
解决步骤:
1)子站在测试机测试通过,运行正常。准备布署到正式环境下(三台WEB服务器)
2)将子站程序拷贝到那三台WEB服务器上,配置好子站相关配置,开放站点与负载均衡开始测试。
3)测试时,页面显示正常,但在触发服务端事件时出现异常。
错误信息“Viewstate is invalid for this page”(此页的视图状态无效)没有为解决此问题提供足够信息
同样的程序为何在测试机运行没问题,放到正式环境下,就出现异常呢?
在微软网站要查到这个异常的解释(http://support.microsoft.com/default.aspx?scid=kb;zh-cn;831150),说建议安装Microsoft .NET Framework 1.1 Service Pack 1。
于是,怀疑没有装这个补丁,就查看注册表项:
项名称:HKEY_LOCAL_MACHINE oftware\Microsoft\NET Framework Setup\NDP\v1.1.4322
SP值为0,表明没有装Framework 1.1 Service Pack,
然后去微软网站下载了.NET Framework 1.1 Service Pack 1和.NET Framework 1.1 Service Pack 1 ASP.NET 安全更新 - Windows Server 2003
4)装上这两个补丁后,运行子站程序,在触发服务端事件时仍旧出现异常。异常如下:
异常详细信息: System.Web.HttpException: 无法验证数据。
堆栈跟踪:
[HttpException (0x80004005): 无法验证数据。]
[HttpException (0x80004005): Authentication of viewstate failed. 1) If this is a cluster, edit <machineKey> configuration so all servers use the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster. 2) Viewstate can only be posted back to the same page. 3) The viewstate for this page might be corrupted.]
再回到831150那篇文章看:“应用此修复程序后,视图状态错误信息标题将变成“Unable to Validate Data”。尽管新的错误信息格式没有对问题进行具体描述,但它比以前的错误信息格式提供了更多信息。”
得知应该是ViewState值已被截断?!
问题就转化:什么原因导致"ViewState值已被截断"呢?
因为程序在测试环境下运行没问题的,那么可能是系统级的问题。
比较一下正式和测试环境:正式环境是三台Server做负载均衡,而测试环境只一台Server。
5)将负载均衡设置修改了一下,只开放一台WEB Server。测试后,发现不出现那个异常。三台机分别测试,均无异常。
推测:可能是负载均衡设置有问题。于是找来系统管理员,他说,子站的负载均衡设置跟主站一样的啊。但还是请他再确认一下两个负载均衡设置的不同之处。
经再次的仔细检查,发现负载均衡Pool的Persistence Type(进程延续)为None,也就是说服务端不保持连接状态。这样,每次服务端事件被触发时,就会导致"ViewState值已被截断"。于是将Persistence Type(进程延续)的值改为Simple,Timeout设为600秒。
总结:
程序员不单要写好程序,也要适当的了解系统。这个问题,不一定会经常遇到,作为一个解决问题的思路,供大家分享。
附:负载均衡一般设三个地方来保证进程延续。首先启动负载均衡,然后设置“Enable Connection Rebind”为true.最后Persistence Type一般设为Simple再加上超时时间。
注:本人对负载均衡研究甚少,不知其他类似软件是否也如此设置,其原理应该都差不多。
下一篇:在web开发中的三个层次使用事务 >>
相关文章:
- · Abstract Factory pattern -- Structural example
- · XML-RPC学习笔记(一)
- · [VS宏]根据函数名称定位函数
- · 三层式的层次划分
- · 服务器控件中js脚本注册方法
- · 复制文件夹所有内容和删除整个文件夹的2个函数
- · 动态绑定DATAGRID里的DropDownList
- · 彻底解决!无效的 CurrentPageIndex 值.它必须大于等于 0 且小于 PageCount!的问题
- · HOW TO:检索本机硬件信息
- · HOW TO:检索应用程序当前执行代码的引用信息
- · HOW TO:初始化共享变量
- · 怎么触发DataGrid模板列中控件的事件?
- · 刚学ASP.Net,学了个简单的计算器
- · 全选DataGrid里的复选框
- · WEB页面多语言支持解决方案
- · javascript 与 asp.net 的交互
- · 动态模板列更新数据分页的例子
- · DataList 控件分页操作
- · 如何用请求字符串传值给用模式窗口打开的aspx页面。
- · Duwamish7学习笔记1
- · Matt Powell的《Server-Side 异步Web Methhods》
- · DataGrid和DropDownList的一些配合以及使用css定制DataGrid
- · 轻松解决asp.net论坛中的一版块多斑竹和一用户担任多版块斑竹的问题(不用数组和split)
- · 分享:aspx页面javascript的几个trick
- · 2个页面间不通过Session与url的传值方式
- · Solidworks二次开发—09--添加配合参考
- · Solidworks二次开发—08--判断是什么特征
- · 创建动态数据输入用户界面
- · 可以代替窗体Refresh方法的函数
- · 无外部控件制作多媒体播放器(四)
- · 无外部控件制作多媒体播放器(三)
- · DirectX9 3D快速上手 3
- · AlertButton, 您确定要执行吗?
- · 无外部控件制作多媒体播放器(二)
- · 用TreeView显示数据通用方法
- · 无外部控件制作多媒体播放器(一)
- · Web Browser Express 概述
- · datagrid编辑删除分页
