我们通常有一个第三方记录器,NLog可以捕获应用程序错误,但它并没有捕获这些记录器。唯一可以查看错误详细信息的地方是在Windows事件查看器中,这些会显示为警告。错误似乎是由asp:Timer控件触发的回发结果
事件查看器中记录的错误消息:
我们的网页表单中的计时器:
<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));
}
}
}
}
遇到此错误时,IIS似乎挂起。它只是间歇性地发生在我们的用户身上,而且我们无法在我们的开发环境中重现它。来自同一用户的后续页面请求可能需要长达20分钟才能处理。
答案 0 :(得分:0)
因此发生此错误的原因是因为下拉列表控件,ddlLoadMessages正被asp:Timer的tick事件修改,并且ddlLoadMessages控件未位于相关的UpdatePanel内。这使得.NET验证引擎无法知道导致错误的下拉列表的更改来源。
我无法确定为什么这会导致后续页面加载时间更长。
编辑 - 似乎这不是页面需要很长时间才能加载的问题的真正来源。每当遇到任何未处理的异常时,我们的网站似乎仍然会挂起。
编辑2 - 终于找到了问题的真正来源,我们使用的是旧版本的.NET Framework 4.5,其中有一些错误导致某些请求意外冻结在RequestAcquireState上,请参阅:
安装最新的.NET 4.5 Framework解决了这个问题。