【问题标题】:Why won't my concurrent asp.net requests from the same client execute concurrently?为什么来自同一客户端的并发 asp.net 请求不会同时执行?
【发布时间】:2016-06-30 22:06:54
【问题描述】:

IIS 7.5、.Net 4.6

从浏览器网络诊断选项卡中,我可以看到请求是堆叠的,而不是同时执行的。 这可以通过静态内容请求(例如样式表、图像、javascript)看到,这些请求在完成之前等待动态请求完成。 我还设计了一个测试,其中使用 javascript 计时器定期请求静态内容。 (我们称之为“http-ping”。如果我有一个长时间运行的主请求,这些 http-ping 请求会备份。

使用 perfmon,我确定了以下计数器随着我的 http-ping 请求的增加而增加: 请求当前; 管道实例计数;

当这些计数器保持为零时: 本机队列中的请求; 排队的请求; 应用程序队列中的请求;

我还通过调试检查了应用程序状态。只有一个线程,对应于主请求,在应用程序代码中处于活动状态。其他线程将堆栈位置显示为“”。

【问题讨论】:

  • 会话可能会导致这种情况。从 Fiddler 中删除 cookie 并执行请求来测试它。
  • 如果我删除会话 cookie,我的主请求将失败。它需要一个会话。
  • 然后用资源进行测试。你说资源也会受到影响。

标签: asp.net iis concurrency


【解决方案1】:

正如@usr 所建议的,会话是问题所在。实际上,根据this msdn article,会话状态的使用会抑制同一会话上的并发操作。就我而言,我也许可以使用

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]

缓解问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2019-03-31
    • 1970-01-01
    • 2013-10-26
    • 2014-08-09
    • 2017-11-15
    相关资源
    最近更新 更多