Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET验证错误导致处理后续请求需要很长时间_C#_Asp.net_Ajax_Webforms - Fatal编程技术网

C# ASP.NET验证错误导致处理后续请求需要很长时间

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

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

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

我们的web表单页面中的计时器:

      <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框架解决了这个问题