Mvc中Session导致action不异步的问题
Session导致Action不异步
啊。回想起来,真是一个大坑啊,最近博主在做一个上传文件实时显示进度条的功能。博主的思路是在上传的时候用一个Task一秒一次向Redis中插入当前的上传进度 ,上传视频后再轮询上传进度实时显示在客户端。

然后我就开始敲代码了,一起看起来都没什么问题。运行的时候一下就懵比了,发现轮询的请求要等到上传的请求返回才可以进入到action中。也就是说我的请求不是异步的了。变成了同步 what??

后来经过一系列排查,原来是session的问题,因为我存了当前的登陆状态,当cookie中用同一个sessionId去请求后台的时候,是lock住的,必须上一个请求返回后才可以下一个请求才会进来,这简直就是在搞事,假如某个action的执行过程特别长,其它的请求只能排在后面,这无疑是特别影响性能的。
那么为什么会是这种设计呢?因为微软希望session是线程安全的,不会有两个线程同时对session内的数据进行修改的情况

那我的进度条功能就不能实现了? 当然不是,微软贴心的为我们留出了选择,我们可以在controller中加注解[SessionState(SessionStateBehavior.ReadOnly)] 也是说,哎呀,老哥,放心吧,我不瞎整,保证这个controller只读session不进行修改,你就让我的小伙伴一起来玩耍吧。这时我们又可以愉快的继续下去了。有人会问了,那我贴了这个注解,但是我又修改了session呢,遗憾的说,老哥控制的还是很严格的,当你做了保证后,你对session的所有修改都是无效的。(Ps:其实另有方法哦)
SessionStateBehavior还有其它的选项
Default
Disabled
Required
Mvc中Session导致action不异步的问题的更多相关文章
- ASP.NET Core MVC中Controller的Action,默认既支持HttpGet,又支持HttpPost
我们知道ASP.NET Core MVC中Controller的Action上可以声明HttpGet和HttpPost特性标签,来限制可以访问Action的Http请求类型(GET.POST等). 那 ...
- ASP.NET Core MVC中Controller的Action如何直接使用Response.Body的Stream流输出数据
在ASP.NET Core MVC中,我们有时候需要在Controller的Action中直接输出数据到Response.Body这个Stream流中,例如如果我们要输出一个很大的文件到客户端浏览器让 ...
- Spring MVC中Session的正确用法<转>
Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...
- 【转】Spring MVC中Session的正确用法之我见
Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...
- Spring MVC中Session的正确用法之我见
Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...
- 转载ASP.NET MVC中Session的处理机制
本文章转载自 http://www.cnblogs.com/darrenji/p/3951065.html ASP.NET MVC中的Session以及处理方式 最近在ASP.NET MVC项目中 ...
- Asp.Net MVC中Controller、Action、View是如何激活调用的
上篇我们介绍了MVC的路由,知道在注册路由的时候会创建一个MvcHandler将其和Url规则一起放入到了RouteCollection中,之后请求通过UrlRoutingModule,根据当前的UR ...
- JQuery文件上传插件uploadify在MVC中Session丢失的解决方案
<script type="text/javascript"> var auth = "@(Request.Cookies[FormsAuthenticati ...
- MVC中Controller和Action讲解上篇
一般我们用mvc开发程序时一般需要三个步骤, 创建模型.创建控制器.创建视图 之前开发程序都是按照这样的步骤来开发的,也没有想过mvc的原理,比如route是怎么找到controller的,contr ...
随机推荐
- 错误解决:error while loading shared libraries: libcurl.so.4: cannot open shared object file: No such file or directory
执行以下代码,生成唯一的UID $fp = popen("/xxx/bin/tools/uuidgen system", "r");// $uid = frea ...
- C#--字符、字符串学习
字符 在.NET Framework中,每个字符都是System.Char结构的一个实例.System.Char类型很简单,提供了两个公共只读常量字段:MinValue和MaxValue. GetNu ...
- URLEncoder.encode 和 URLDecoder.decode 处理url的特殊参数
在使用 url 的 queryString 传递参数时,因为参数的值,被DES加密了,而加密得到的是 Base64的编码字符串,类似于: za4T8MHB/6mhmYgXB7IntyyOUL7Cl++ ...
- Memcached学习笔记
[TOC] 前言 此为学习笔记汇总,如有纰漏之处,还望不吝指出,谢谢. 启动流程 调用settings_init()设定初始化参数 从启动命令中读取参数来设置setting值 设定LIMIT参数 开始 ...
- HTML 5 的自定义 data-* 属性和jquery的data()方法的使用
人们总喜欢往HTML标签上添加自定义属性来存储和操作数据.但这样做的问题是,你不知道将来会不会有其它脚本把你的自定义属性给重置掉,此外,你这样做也会导致html语法上不符合Html规范,以及一些其它副 ...
- Navicat安装详解
本文章介绍MySql图形化操作软件Navicat的安装 属于PHP环境搭建的一部分. PHP完整配置信息请参考 http://www.cnblogs.com/azhe-style/p/php_new_ ...
- jackson annotations注解详解
jackson中常用到的注解 猛击下面的连接地址 http://blog.csdn.net/sdyy321/article/details/40298081
- SSL handshake alert: unrecognized_name error since upgrade to Java 1.7
今天将jdk从1.6升级到1.7,但是HttpUrlConnection连接https出现问题了. javax.net.ssl.SSLProtocolException: handshake aler ...
- linux 命令行中常用光标移动快捷键
对linux不怎么熟悉,以前在linux中敲命令的时候,要移动光标,傻傻的一个一个的移动,感觉特不爽.有几个常用的快捷键. ctrl+左右键:在单词之间跳转 ctrl+a:跳到本行的行首 ctrl+e ...
- FineReport根据点击次数奇偶性排序之字符型
上一篇文章我们提到了字段为数据型的数据列排序方法,采用的是根据点击次数奇偶性来排序,那如果是字段为字符型,又该如何实现呢? 这里提供的解决思路是通过超级链接来实现升序降序两张模板之间的相互调用,每点击 ...