ASP.NET验证错误导致后续请求需要很长时间才能得到处理

时间:2015-06-15 09:45:51

标签: c# asp.net ajax webforms

我们通常有一个第三方记录器,NLog可以捕获应用程序错误,但它并没有捕获这些记录器。唯一可以查看错误详细信息的地方是在Windows事件查看器中,这些会显示为警告。错误似乎是由asp:Timer控件触发的回发结果

事件查看器中记录的错误消息: Error message

我们的网页表单中的计时器:

      <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分钟才能处理。

1 个答案:

答案 0 :(得分:0)

因此发生此错误的原因是因为下拉列表控件,ddlLoadMessages正被asp:Timer的tick事件修改,并且ddlLoadMessages控件未位于相关的UpdatePanel内。这使得.NET验证引擎无法知道导致错误的下拉列表的更改来源。

我无法确定为什么这会导致后续页面加载时间更长。

编辑 - 似乎这不是页面需要很长时间才能加载的问题的真正来源。每当遇到任何未处理的异常时,我们的网站似乎仍然会挂起。

编辑2 - 终于找到了问题的真正来源,我们使用的是旧版本的.NET Framework 4.5,其中有一些错误导致某些请求意外冻结在RequestAcquireState上,请参阅:

ManagedPipelineHandler for an AJAX POST crashes if an IE9 user navigates away from a page while that call was in progress

安装最新的.NET 4.5 Framework解决了这个问题。