现象:在一个网站中,当访问一个处理比较耗时的页面(A页面),页面请求还没有返回时,此时再点击访问该网站的其他页面(B页面)会出现B页面很久都没有响应和返回,直到A页面输出返回数据时才开始处理B页面的请求,造成请求排队处理,A页面阻塞了B页面的请求处理。

  开始我一直怀疑是不是浏览器单线程的缘故,在网上搜索了资料,IE6/7,FF都是多线程浏览器(IE6好像是2个线程),用IE6、IE7、FF都试过了,结果一样,这就奇怪了,明明都是多线程,怎么会阻塞呢?

  在网上搜索了好几次相关的问题,还是没查出个所以然,但网站造成的客户体验确实很差,每当访问到那个耗时的A页面时,再想访问其他页面根本查看不了。“怎么系统那么慢”,晕,没办法,我也不懂怎么处理(不负责任的态度啊,呵呵)。

  在一次的无意中我发现竟然在A页面Loading(页面上加的提示)的时候,可以访问某个页面,真是惊喜,再试试几次,可以,确实可以,是不是页面代码阻塞了?于是查这两个页面的代码,其实这两个页面的代码就十几行,没什么问题呢。

  经过多次尝试和比对,才发现这两个页都是无需登陆验证的页面,之前出现阻塞的页面都是需登陆验证后才可访问的页面,而系统的验证信息是存储在Session中,通过Session判断验证的。这时想到应该是Session的问题,但还是不知如何处理,再去网上搜索,互联网上的信息真是应有尽有,终于搜索到问题所在:

  /************************************************************/

  问:为了可以顺序访问Session的状态值,Session是否提供了锁定机制?

  答:Session实现了Reader/Writer的锁机制:

  当页面对Session具有可写功能(即页面有<%@ Page EnableSessionState="True" %>标记),此时直到请求完成该页面的Session持有一个写锁定。

  当页面对Session具有只读功能(即页面有<%@ Page EnableSessionState="ReadOnly" %>标记),此时知道请求完成该页面的Session持有一个读锁定。

  读锁定将阻塞一个写锁定;读锁定不会阻塞读锁定;写锁定将阻塞所有的读写锁定。这就是为什么两个框架中的同一个页面都去写同一个Session时,其中一个要等待另一个(稍快的那个)完成后,才开始写。

  可查看这里http://www.bitsCN.com/article/9442.htm

  /************************************************************/

  “写锁定将阻塞所有的读写锁定”,也就是说页面在EnableSessionState="True"的情况下没返回输出时,一直持着Session写操作,其他页面对Session的读操作必须等待,而asp.net的aspx页面默认是EnableSessionState="True",每个页面从请求开始至返回一直持着Session写操作,需验证页面必须读取Session值判断,这就是为什么需验证的页面请求被阻塞的原因。只要耗时页面(A页面)没有Session的写操作,也就不会阻塞其他页面的请求,于是修改A页面的EnableSessionState="ReadOnly",例如:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TBS_Monitor_List.aspx.cs" EnableSessionState="ReadOnly"  Inherits="TBS_Monitor_List" %> ,问题解决。

来源:http://www.bitscn.com/pdb/dotnet/201003/181840.html

关于asp.net会话阻塞的更多相关文章

  1. 解决ASP.NET 自定义报表部署到IIS浏览时出现ASP.NET会话已结束问题

    进到公司开始接触的项目就要做报表,原系统使用的是水晶报表,但是水晶报表展示方面美观方面不怎么好需客户需要美化一下.自定义报表与水晶报表之前都没有接触过,自己先学了一下这两种报表,后面觉得自定义报表设计 ...

  2. ASP.NET会话(Session)保存模式--终于知道session为什么丢失了

    [原创]ASP.NET会话(Session)保存模式 作者:寒羽枫(cityhunter172) 大家好,已有四个多月没写东东啦.今日抽空就说一下 Session 在 .Net v1.0/v1.1 中 ...

  3. ASP.net Session阻塞、Session锁、MVC Action请求阻塞问题

    会话Session Session用于服务器端状态管理,使用Session之后,每个客户端都可以将实际的数据保存在服务器上,对于每个客户端的数据,将会生成一个对应的唯一的key(保存在客户端).客户端 ...

  4. [转]ASP.NET会话(Session)保存模式

    本文转自:http://blog.csdn.net/cityhunter172/article/details/727743 作者:寒羽枫(cityhunter172) 大家好,已有四个多月没写东东啦 ...

  5. 转 [分享一个SQL] 查会话阻塞关系,层次关系.

    with ash as (select /*+ materialize*/* from DBA_HIST_ACTIVE_SESS_HISTORY  where sample_time between ...

  6. WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务

    原文:WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务 在<基于IIS的WCF服务寄宿(Hosting)实现揭秘>中,我们谈到在采用基于IIS(或者 ...

  7. Oracle RAC环境下定位并杀掉最终阻塞的会话

    实验环境:Oracle RAC 11.2.0.4 (2节点) 1.模拟故障:会话被级联阻塞 2.常规方法:梳理找出最终阻塞会话 3.改进方法:立即找出最终阻塞会话 之前其实也写过一篇相关文章: 如何定 ...

  8. 会话执行存储过程,等待被阻塞,Kill session场景模拟

    本次场景来源: 通知某个会话:执行execute addupp(1,'five');类似的存储过程,会话等待:(会话等待两种情况:一种确实执行,但是未完成:另一种就是执行的操作无法获取资源,等待资源释 ...

  9. Oracle阻塞会话源头查找-单机和RAC环境

    在写 Oracle session相关数据字典(一)  这篇文章时,提到使用v$session视图的树形查询可以得到Oracle锁树,这样就便于我们找出阻塞会话的源头,但是仅仅可以在单机环境中使用.今 ...

随机推荐

  1. .NET MVC执行过程

    1.网址路由比对 2.执行Controller与Action 3.执行View并返回结果 在使用MVC中是由IgnoreRoute()辅助方法对比成功的,会导致程序直接跳离MVC的执行生命周期,将程序 ...

  2. N个元素的集合划分成互斥的两个子集的数目

    前面这是寒假听马士兵老师讲的时候积累的语录.......... 1.php是水果刀,java是菜刀,刀法比较多,一年的和三年的区别很大. 2.nanicat连接mysql出现10061是服务没开启,却 ...

  3. 桌面小部件----LED电子时钟实现

    桌面控件是通过 Broadcast 的形式来进行控制的,因此每个桌面控件都对应于一个BroadcastReceiver.为了简化桌面控件的开发,Android 系统提供了一个 AppWidgetPro ...

  4. Java线程Dump分析工具--jstack【转载】

    jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...

  5. J - Borg Maze - poj 3026(BFS+prim)

    在一个迷宫里面需要把一些字母.也就是 ‘A’ 和 ‘B’连接起来,求出来最短的连接方式需要多长,也就是最小生成树,地图需要预处理一下,用BFS先求出来两点间的最短距离, *************** ...

  6. js转码和解码兼容低版本火狐

    function HTMLEncode(html) {                var temp = document.createElement("div");       ...

  7. JVM性能调优监控工具

    命令:jps.jstat.jmap.jhat.jstack 简介:(1) jmap -dump:format=b,file=eclipse.bin 10481  生成堆转储快照eclipse.bin ...

  8. Laravel 4 Quick Tip: Custom Error Pages

    App::error(function($exception, $code) { switch ($code) { case 403: return Response::view('errors.40 ...

  9. Xcode7 国际化

    1.第一步 HaiTing_xcodeproj.png 2.第二不 HaiTing_xcodeproj 2.png 3.第三步 Localizable_strings.png 5第五步 ZLBMeVi ...

  10. 完毕port(CompletionPort)具体解释 - 手把手教你玩转网络编程系列之三

       手把手叫你玩转网络编程系列之三    完毕port(Completion Port)具体解释                                                    ...