【问题标题】:ASP.NET Validation error causes subsequent requests to take a long time to be processedASP.NET Validation 错误导致后续请求需要很长时间才能处理
【发布时间】:2015-06-15 09:45:50
【问题描述】:

我们通常有一个 3rd 方记录器 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 分钟才能得到处理。

【问题讨论】:

    标签: c# asp.net ajax webforms


    【解决方案1】:

    所以发生此错误的原因是因为下拉列表控件 ddlLoadMessages 正在被 asp:Timer 的滴答事件修改,并且 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 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多