在ASP.NET Core中启用来自同一会话的并发请求

编辑:这显然是在浏览器中测试的问题,而不是代码。 默认情况下,Core中的会话将被禁用。

原始问题:

我正在开发一个Web API,它需要同时处理多个请求,即使是来自同一个客户端。 它是一个ASP.NET核心MVC(1.1.2)应用程序,目前针对完整框架(4.5.2),主要是为了与其他库兼容。

当我第一次测试我的并发性时,我很惊讶这些请求根本不是并发的。 我用Google搜索并发现ASP.NET不会同时处理会话中的请求,而是将它们排队。 快速测试表明会话可能是罪魁祸首:

[HttpGet("sleep")] public string Sleep() { Thread.Sleep(5000); return $"Done at {DateTime.Now:u}"; } 

当我从同一浏览器中的多个选项卡快速请求时,每个选项卡之间需要5秒钟。 当我使用多个浏览器时,情况并非如此,它会在5秒钟内响应多次。

在搜索解决方案时,我一直在寻找在ASP.NET中禁用会话状态的方法,但对Core来说却没有。

就会话而言,我使用的是默认的API项目模板,而我没有采取任何措施来专门启用/设置会话状态。

有没有办法摆脱ASP.NET Core中的会话状态? 或者是否有更好的解决方案来启用并发请求?

如果在控制器类上设置此属性

[SessionState(SessionStateBehavior.ReadOnly)]

它会将会话设置为不锁定,因此您将能够进行并发请求

你可以在这里阅读更多相关信息