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 ...
随机推荐
- 可供VC调用的QT编写的界面DLL方法
一般直接编写的QT动态库是无法被Windows下的VC6.0等调用的. 如下步骤 第一步:必须要在QT界面库源码下包含qtwinmigrate的源码包和库,网上可下载到. 第二步:在QT的proc文件 ...
- 行业介绍:车载DVD MID 导航用料一般包含国腾LVDS芯片GM8284C/GM8283
车载DVD MID 导航用料一般包含国腾LVDS芯片 GM8284C/GM8283/替代SN75LVDS83,THC63LVDM83C , 音频ES7144/CS4344, 龙讯MHL HDMI芯片 ...
- SQlServer---时间的操作
select Day(getdate())--当前日是这个月的第几天 -Day(getdate()))))--当前月有多少天 -Day(getdate()))))-Day(getdate())--当前 ...
- C语言之scarf函数
一 基本用法 scanf函数:接收用户的输入 语法: scanf("格式化控制符",地址列表); 例: int num; scanf("%d",&num ...
- Python自动化开发-变量、数据类型和运算
一.变量 变量定义:Variables are used to store infomation to referrenced and manipulated in a computer progra ...
- iOS 让UIButton根据文字内容自动计算宽高
Xcode自带的UIButton控件是没有办法根据文字内容计算自身的宽和高的,下面演示一下问题, 我用代码方式创建一个UIButton,并且设置了一些属性,下面看一下效果图 一切都是这么的美好,跟我们 ...
- 转载--初识绘图工具plantUML
原文出处:http://www.jianshu.com/p/e92a52770832 什么是 PlantUML PlantUML 是一个画图脚本语言,用它可以快速地画出: 时序图 流程图 用例图 状态 ...
- 第13章 MySQL高级编程
1.事务:一个或一系列的查询: 2.使用事务安全的表格类型(通过InnoDB): ①关闭自动提交: set autocommit=0; //若自动提交被打开,须使用如下语句开始一个事务: // st ...
- MATLAB中的多项式运算
作者:长沙理工大学 交通运输工程学院 王航臣 1.多项式求根 在MATLAB中求取多项式的根用roots函数. 函数:roots 功能:一元高次方程求解. 语法:roots(c) 说明:返回一个列向量 ...
- Java写入文件
import java.io.File;import java.io.FileNotFoundException;import java.io.PrintWriter; public class Fi ...