C# ASP.NET验证错误导致处理后续请求需要很长时间
我们通常有一个第三方记录器NLog来捕获应用程序错误,但它没有捕获这些错误。只能在Windows事件查看器中查看错误详细信息,这些信息将显示为警告。错误似乎是由asp:Timer控件触发的回发造成的 事件查看器中记录的错误消息: 我们的web表单页面中的计时器:C# ASP.NET验证错误导致处理后续请求需要很长时间,c#,asp.net,ajax,webforms,C#,Asp.net,Ajax,Webforms,我们通常有一个第三方记录器NLog来捕获应用程序错误,但它没有捕获这些错误。只能在Windows事件查看器中查看错误详细信息,这些信息将显示为警告。错误似乎是由asp:Timer控件触发的回发造成的 事件查看器中记录的错误消息: 我们的web表单页面中的计时器: <asp:UpdatePanel ID="uPnlMsgMngmt" runat="server"> <ContentTemplate> <asp
<asp:UpdatePanel ID="uPnlMsgMngmt" runat="server">
<ContentTemplate>
<asp:Timer ID="tmMsgMngmt" runat="server" OnTick="tmMsgMngmt_Tick" Interval="10000"></asp:Timer>
从tmMsgMngmt_Tick调用的代码绑定数据
//List of all areas
List<MessageAllArea> lstAreaStatus = messageArears.GetAreaStatus();
Session.Add("AllArea", lstAreaStatus);
//List of affected areas
List<MessageAllArea> lstAffectedArea = messageArears.GetAffectedArea();
Session.Add("AfectedArea", lstAffectedArea);
//List of affected areas
List<MessageAllArea> lstLdshedding = messageArears.GetLoadShedding();
Session.Add("LoadShdArea", lstLdshedding);
ltvData.DataSource = lstAreaStatus;
ltvData.DataBind();
//Populate Area drop down list
ddlLoadMessages.Items.Clear();
if (lstAreaStatus.Count > 0)
{
foreach (MessageAllArea item in lstAreaStatus)
{
int attNo = int.Parse(item.attnFlag);
if (attNo == 1)
{
ddlLoadMessages.Items.Add(new ListItem(item.Area, item.AreaId));
}
}
}
}
//所有区域的列表
List lstAreaStatus=messageArears.GetAreaStatus();
添加(“AllArea”,第1区域状态);
//受影响地区名单
List lsAffectedArea=messageArears.GetAffectedArea();
添加(“受影响地区”,受影响地区);
//受影响地区名单
List lstldshitch=messageArears.getloadshetch();
添加(“LoadShdArea”,lstldscheck);
ltvData.DataSource=lstAreaStatus;
ltvData.DataBind();
//填充区域下拉列表
ddloadMessages.Items.Clear();
如果(lstraestatus.Count>0)
{
foreach(MessageAllArea项目处于区域状态)
{
int attNo=int.Parse(item.attnFlag);
如果(收件人==1)
{
ddloadMessages.Items.Add(新列表项(item.Area,item.AreaId));
}
}
}
}
遇到此错误时,IIS似乎挂起。它只会间歇性地发生在我们的用户身上,我们无法在我们的开发环境中重现它。处理来自同一用户的后续页面请求可能需要长达二十分钟。因此发生此错误的原因是,dropdownlist控件、DllLoadMessages正在被asp:Timer的勾号事件修改,并且DllLoadMessages控件未位于相关UpdatePanel内。这使得.NET验证引擎不知道导致错误的下拉列表的更改来自何处 然而,我还不能确定为什么这会导致后续页面的加载时间更长 编辑-似乎这不是问题的真正根源,页面加载需要很长时间。每当遇到任何未处理的异常时,我们的网站似乎仍然挂起 编辑2-最终找到了问题的真正根源,我们使用的是一个较旧版本的.NET Framework 4.5,它有一个bug,其中一些请求会意外地冻结在RequestAcquireState,请参见: 安装最新的.NET4.5框架解决了这个问题