asp.net MVC Session锁的问题
一直在用Session,对Session锁并没有太多的关注,可能是平时没有注意。前段时间突然发现,一个Ajax Get请求,直接访问地址,只需要几十ms,但是在页面中加载,却需要2s。最后定位到Session的问题。
具体的内容我在园里看了下别人的文章:http://blog.csdn.net/paolei/article/details/38052129
不过,也发现了一些问题。
比如,这个例子:
后端:
public class MyController : Controller
{
// GET: My
public ActionResult Index()
{
return View();
}
[HttpGet]
public string GetTest1()
{
Thread.Sleep(1000);
return "GetTest1";
}
[HttpGet]
public string GetTest2()
{
return "GetTest2";
}
}
前端:
$.get("GetTest1", function (resp) {
console.log(resp); // server response
});
$.get("GetTest2", function (resp) {
console.log(resp); // server response
});
直接使用上面的代码,没有访问过Session,代码默认不进行Session锁,运行结果:
GetTest2
GetTest1
当在Controller中写Session后:
public ActionResult Index()
{
Session["A"] = "A";
return View();
}
运行结果:
GetTest1
GetTest2
然后按上文在Controller前加:[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)],再次运行,发现结果是一样的,说明ReadOnly是无效的。
其实也是,虽然是ReadOnly,但是代码中还是写了,这和ReadOnly显然是矛盾的,但是代码并不会报错,只是这个属性无效了。
后来,改成:[SessionState(System.Web.SessionState.SessionStateBehavior.Disabled)]
这时再运行,就直接报错了。
最后总结了一下,只要Controller中有Session的写,无论Controller前的SessionStateBehavior是什么,都会认为Session是可写的,会进行Session锁。 所以,如果真的对Ajax并发性能要求比较高的话,就不能用Session了吧。 所以,觉得SessionStateBehavior这个属性有点鸡肋呀。本人浅见,如果有高手希望指点一二。
后来,我对自己的应用想到了一个不是办法的办法,把另外一个Ajax加载比较慢的,使用timeout 20ms,这个是调用一个复杂的计算加载待办数的,另一个是加载页面列表数据,显然,用户一开始最想先看到列表数据。
asp.net MVC Session锁的问题的更多相关文章
- asp.net mvc session锁问题
一.会话状态Session Session用于服务器端状态管理,使用Session之后,每个客户端都可以将实际的数据保存在服务器上,对于每个客户端的数据,将会生成一个对应的唯一的key(保存在客户端) ...
- asp.net mvc session锁问题 (转载)
一.会话状态Session Session用于服务器端状态管理,使用Session之后,每个客户端都可以将实际的数据保存在服务器上,对于每个客户端的数据,将会生成一个对应的唯一的key(保存在客户端) ...
- Ajax异步请求阻塞情况的解决办法(asp.net MVC Session锁的问题)
讨论今天这个问题之前,我们先来看下浏览器公布的资源并发数限制个数,如下图 不难看出,目前主流浏览器支持都是最多6个并发 需要注意的是,浏览器的并发请求数目限制是针对同一域名的 意即,同一时间针对同一域 ...
- [转]菜鸟程序员之Asp.net MVC Session过期异常的处理
本文转自:http://www.cnblogs.com/JustRun1983/p/3377652.html 小赵是刚毕业的计算机专业方面的大学生,4年的大学时间里面,他读过了很多编程方面的数据,也动 ...
- 菜鸟程序员之Asp.net MVC Session过期异常的处理
小赵是刚毕业的计算机专业方面的大学生,4年的大学时间里面,他读过了很多编程方面的数据,也动手也了很多代码.现在毕业了,他如愿的加入了T公司,开始了自己的程序员生涯.他信心满满,相信自己4年的学习到的东 ...
- asp.net mvc Session RedisSessionStateProvider锁的实现
最近项目用到了RedisSessionStateProvider来保存session,发现比内存session慢,后来慢慢了解,发现asp.net session是有锁的.我在文章 你的项目真的需要S ...
- Asp.Net MVC session跨域
目的 在公司项目的某个特定场景中,需要在站点B的后端伪造请求,获取站点A的登录状态,抓取站点A的页面内容,因此要用实现session的跨域.以注册功能为例. 步骤 原理 简单地说,对于ASP.Net应 ...
- ASP.NET MVC Session 过期验证跳转至登入页面
一.在要检查登入的控制器上继承 CheckLoginController 类 2. CheckLoginController 类的写法 using System; using System.Colle ...
- Asp.net MVC Session过期异常的处理
一.使用MVC中的Filter来对Session进行验证 (1)方法1: public class MyAuthorizeAttribute : FilterAttribute, IAuthoriza ...
随机推荐
- JAVA实现数据库数据导入/导出到Excel(POI)
准备工作: 1.导入POI包:POI下载地址http://mirrors.tuna.tsinghua.edu.cn/apache/poi/release/src/(重要) 如下 2.导入Java界面美 ...
- JPA 批注参考
body, p, th, td, li, ul, ol, h1, h2, h3, h4, h5, h6, pre { font-family: simsun; line-height: 1.4; } ...
- VC中如何设置菜单项的触发状态?
MFC中初始菜单栏如下: 当工程未新建,或者未打开时,后面的观测菜单设置为灰色,不可触发. 当新建工程或者打开工程后,菜单变回可触发状况. 观测菜单如下: 下面以轴力观测菜单为例 轴力初始测量菜单 ...
- Erlang Resources 资讯小站
Erlang Resources 资讯小站 好久没有写博客,是懒了吗?不是;前面两个月在紧张地推进一个项目,中间积累了一些RabbitMQ和Erlang的东西;本打算在项目结束之后赶紧总结一下,结果 ...
- 线程内唯一对象HttpContext
在asp.net中,HttpContext是主线程内唯一对象.在web应用中开启多线程,在另外一个线程中是无法访问HttpContext. 如果需要在另外一个线程中使用HttpContext.Curr ...
- Ubuntu下OpenVPN客户端配置教程
一般来说,提供Web服务的Linux服务器是很少需要连接OpenVPN的,但是个人Linux计算机在很多时候就需要连接OpenVPN了.比如以Linux为开发环境,需要连接公司的OpenVPN等等. ...
- 使用 Rx 中预定义的 Subject
看到一幅有趣的关于 Rx 学习的图,想知道学习 Rx 的学习曲线?不,是峭壁! 我们可以直接通过 Rx 的 Observer 来创建 Observable 对象. 但是,使用这种方式往往比较复杂,在特 ...
- LocalDateTime返回的是Local时间
LocalDateTime返回的是本地时间,比如 LocalDateTime startDateTime = LocalDateTime.of(2016, 9, 18,00, 00); 返回的时间格式 ...
- Python wifi掉线重连接
原理很简单,通过python执行dos命令 : ping 和 netsh 需要用到os和time模块 代码如下: >>> import os >>> print ' ...
- Python datetime模块的datetime类
datetime模块定义了下面这几个类: datetime.date:表示日期的类.常用的属性有year, month, day. datetime.time:表示时间的类.常用的属性有hour, m ...