使用SessionStateBehavior.ReadOnly写入会话变量

l46*_*kok 10 c# asp.net asp.net-mvc session http

在我的ASP.NET MVC 5应用程序中,我正在对GET控制器内部的方法执行请求,该方法需要读取存储在会话中的值.为了避免会话状态锁定问题,我已经设置SessionStateBehaviorReadOnly类级别.

 [SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
    public class TestController: Controller
    {
         var test = Session["KEY"];
...
Run Code Online (Sandbox Code Playgroud)

但是,偶尔,我需要将Session变量覆盖到同一方法中的其他内容.ASP.NET MVC不允许我使用SessionStateBehaviorset来执行此操作ReadOnly.我无法设置它,Required因为我再次遇到会话状态锁定问题,阻止并发AJAX请求.

对此有什么好的解决方案?

编辑:我们正在使用SQL服务器进行会话状态管理.

小智 4

如果您的目标是 .NET Framework 4.6.2 并且您使用的是 SQL Server,则可以利用新的异步 SessionState 模块来异步访问会话存储提供程序。

下载并安装 SessionStateModule 和SqlSessionState NuGet 包。

还要考虑SQLServer 模式将会话状态存储在 SQL Server 数据库中。

注意(来自评论)

SqlSessionStateProviderAsync根据此msdn 博客,虽然 ASP.NET Core 中的会话是非锁定的,但只有下一个版本才会引入此功能才会引入此功能。

替代提供商

另一个不同的选项是使用StackExchange.Redis:例如,对于 Azure 应用服务中的 Web 应用程序,请遵循以下配置步骤。更一般地,在一个或多个 Redis 服务器中,RedisSessionProvider从不锁定会话