【问题标题】:The request queue limit of the session is exceeded超出会话的请求队列限制
【发布时间】:2020-05-13 06:11:39
【问题描述】:

我在 ASP.NET 应用程序 NET 4.7.1 中遇到此错误。

超出会话的请求队列限制。

完整:

System.Web.HttpException (0x80004005): The request queue limit of the session is exceeded.
at System.Web.SessionState.SessionStateModule.QueueRef()
at System.Web.SessionState.SessionStateModule.PollLockedSession()
at System.Web.SessionState.SessionStateModule.GetSessionStateItem()
at System.Web.SessionState.SessionStateModule.BeginAcquireState(Object source, EventArgs e, AsyncCallback cb, Object extraData)

有什么建议吗?

【问题讨论】:

    标签: asp.net session .net-4.7.1


    【解决方案1】:

    .NET 4.7 中的默认行为已更改。 Retargeting guide suggests:

    要恢复旧行为,您可以将以下设置添加到 web.config 文件以选择退出新行为。

    <appSettings>
      <add key="aspnet:RequestQueueLimitPerSession" value="2147483647"/>
    </appSettings>
    

    澄清改变的行为:

    在 .NET Framework 4.6.2 及更早版本中,ASP.NET 执行请求 依次使用相同的 Sessionid,并且 ASP.NET 总是发出 Sessionid 默认通过cookies。如果一个页面需要很长时间 响应,它将显着降低服务器性能 在浏览器上按 F5。在修复中,我们添加了一个计数器来跟踪 排队的请求并在它们超过时终止请求 规定的限度。默认值为 50。如果达到限制,则 警告将记录在事件日志中,并且可能会出现 HTTP 500 响应 记录在 IIS 日志中。

    也在此处发送:https://knowledgebase.progress.com/articles/Article/The-request-queue-limit-of-the-session-is-exceeded-in-sitefinity-11-2

    【讨论】:

    • 这是什么原因?不恢复旧行为就不能解决?不是 4.5 中的错误,4.7.1 中的错误... 4.7.1 中的错误?修复是恢复旧的行为。
    • 是的,这可能是 4.7.1 中的一个错误,因为它是由 4.7 版本的最近更改引起的。我不知道具体原因,但微软文档也提到了这种重定向类型的解决方案。有关从 4.5.2 更新到 4.7.1 的所有建议更改都记录在此处:docs.microsoft.com/en-us/dotnet/framework/migration-guide/…。
    • 为什么页面响应时间长? world.episerver.com/blogs/mahdi-shahbazi/dates/2018/10/…太:&lt;add key="aspnet:AllowConcurrentRequestsPerSession" value="true" /&gt;
    • 我在这里有些困惑,如果我的应用程序在 .net framework 4.7.1 上运行并收到错误:超出会话的请求队列限制,那么 aspnet:RequestQueueLimitPerSession 的值应该是25 或 2147483647 ?
    【解决方案2】:

    有时这个错误是由服务器端的许多重定向产生的,经过调查我发现事实上用户在我修复这个错误后被 ActionsFilter 重定向到相同的操作,我想如果你调查 IIS 日志你更有可能发现相同的问题。

    PS。对于这种情况,设置RequestQueueLimitPerSession 不会解决问题。

    重现:打开 IE 11 打开指定路径并按 F5 60 秒。它将对该路径产生大量请求,如果我们查看 iis,我们会发现一些带有win-32 status = 64 的请求

    对 IIS 日志的全面分析将为您提供有关此请求的性质/用户代理/所有访问的路径/请求状态/...的大量信息...

    【讨论】:

    • 任何解决方案?如何避免 DDoS 攻击?
    • 您可以在特定时间范围内通过 IP 阻止用户。
    【解决方案3】:

    在活动异常频繁的日子里,我在 MVC 应用程序(.NET 版本 4.7.2)中遇到了同样的错误。我通过在应用程序的数据库中添加必要的表索引来修复它。就我而言,解决方案不是调整“aspnet:RequestQueueLimitPerSession”设置,而是解决导致会话请求超出默认限制的数据库性能的潜在问题。

    【讨论】:

    • 添加必要的表索引?您是否使用任何工具来获取推荐的索引?
    • 我使用 SQL Server Management Studio 中提供的活动监视器工具来识别“最近的昂贵查询”。我按“Executions/min”和“CPU (ms/sec)”对结果排序,以找到导致问题的存储过程。接下来,我在 SQL Server Management Studio 中使用“包括实际执行计划”选项执行了存储过程,SQL Server 为我确定了缺失的索引。我希望这有帮助。如果您需要更多信息,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2020-12-23
    • 1970-01-01
    相关资源
    最近更新 更多