日期:2014-05-17  浏览次数:20398 次

100分求救很怪的问题 关于 MVC Action 被阻塞
同一个control中有三个action,

第一个(action):
C# code


  public ActionResult Index()
  {
  Thread.Sleep(10000);
  ViewData["Message"] = "欢迎使用 ASP.NET MVC!";
  return View();
  }




第二个(action):
C# code
 
  
  public ActionResult About() 
  { 
  Session["x"] = "x"; 
  return View(); 
  } 
  
 


第三个(action):
C# code


  public ActionResult X()
  {
  return View();
  }


运行情况:未请求 About页面之前(未操作session),当直接请求Index页面时他会休息10秒钟,此时在同一浏览器中新的选项卡中请求X页面时;Index页面和X页面之间是异步的;Index页面的10秒钟的休息不影响对X页面的访问;
但是当请求About页面之后(操作了session),再一次请求Index页面,同时请求X页面时,此时X页面必须等到Index页面休息完成后(10秒钟)之后,才能响应;也就是说操作了session之后Index页面和X页面之间是同步的;

------解决方案--------------------
对 ASP.NET 会话状态的访问专属于每个会话,这意味着如果两个不同的用户同时发送请求,则会同时授予对每个单独会话的访问。但是,如果这两个并发请求是针对同一会话的(即,使用相同的 SessionID 值),则接收到的第一个请求获得对会话信息的独占访问权,而第二个请求将在第一个请求完成之后执行,或直到由于第一个请求超过锁定超时时间而释放对该信息的独占锁定后再执行。如果将 EnableSessionState 页指令设置为 ReadOnly,则对只读会话信息的请求不会导致对会话数据的独占锁定。可能仍需等到会话数据由读写请求而获得的锁定被解除后,对会话数据的只读请求才能得到满足。

http://msdn.microsoft.com/zh-cn/library/ms178581(v=vs.80).aspx

http://www.cnblogs.com/fish-li/archive/2011/07/31/2123191.html
------解决方案--------------------
楼上大牛呀。
------解决方案--------------------
session会锁的