gpt4 book ai didi

internet-explorer-9 - 如果 IE9 用户在调用正在进行时离开页面,则 AJAX POST 的 ManagedPipelineHandler 会崩溃

转载 作者:行者123 更新时间:2023-12-02 19:12:34 35 4
gpt4 key购买 nike

场景:

  • 用户使用的是 IE9(IE8/10 不受影响)。
  • 用户有一个事件 session 。
  • Page 使用 SessionState(SessionStateBehavior.Required) 属性(ReadOnly 不受影响)向 Controller 发起 AJAX POST(GET 不受影响)请求。某些原因导致该请求无法立即处理(例如另一个正在处理的请求已锁定 session )。
  • 当 AJAX POST 正在进行时,用户会离开页面(GET 或 POST - 无关紧要)

结果:

  • AJAX POST 终止并返回 HTTP 500(浏览器已停止监听,但您可以在 IIS 日志中看到它)。 IIS 失败请求跟踪显示错误为“指定的网络名称不再可用。(0x80070040)。”
  • 在执行下一个需要读/写 session 访问权限的请求之前,用户 session 会被锁定 80 到 120 秒(通常为 100 秒左右)。

进一步挖掘 IIS 失败请求跟踪创建的日志表明,在锁定 session 状态之后(在 REQUEST_ACQUIRE_STATE 阶段),AJAX POST 会像这样崩溃,但由于 REQUEST_RELEASE_STATE 阶段没有发生,因此 session 锁不会被释放。我假设存在某种安全机制,可以在 80-120 秒后解锁 session ,但这种长时间的挂起显然对我的用户来说是不受欢迎的。

我有一个简单的 VS2012/.Net 4.5/MVC4 项目演示了该问题,网址为 https://github.com/jorupp/Ie9SessionCrash (有一个页面通过 sleep 调用发布一系列操作的帖子)。显示问题的 IIS 失败请求跟踪位于 https://github.com/jorupp/Ie9SessionCrash/tree/master/Ie9SessionCrash/TraceOfHttp500 的项目中.

为了解决此问题,我们计划确保永远不会对需要 session 的操作进行任何 AJAX POST 调用,并且:

  • 尽可能使用 GET 调用
  • 对具有 SessionState(SessionStateBehavior.ReadOnly) 属性的 Controller 使用 POST 调用。

是否有更好的方法来处理这个问题,或者我是否缺少与此相关的 IIS/.Net 补丁?或者这种情况是否因其他原因而无效?我不太愿意将此归咎于框架/IIS,但我认为我已经消除了我的代码的错误。

最佳答案

这似乎是 ASP.NET 4.5 中的回归。我们的团队正在开发补丁,但作为临时解决方法,请尝试将此行放在 Web.config 中(更多信息 here ):

<system.webServer>
<serverRuntime uploadReadAheadSize="0" />
</system.webServer>

请告诉我们这是否适合您!

关于internet-explorer-9 - 如果 IE9 用户在调用正在进行时离开页面,则 AJAX POST 的 ManagedPipelineHandler 会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15437524/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com