我一直在寻找这种解决方案。任何见解将不胜感激。

情况:当在一个页面中有多个PageMethod调用时,每个方法调用都会在Session对象上持有一个锁,从而导致阻塞。只有将@Page指令设置为False|ReadOnly,才能使PageMethod调用异步。

结果:当Page指令是默认值(读/写),但是该会话未在页面上的任何位置使用时,不会阻塞调用。在页面级别对会话的任何读取或写入都会阻止pagemethod调用。

问题:在EnableSessionState=ReadOnly指令中创建@Page的限制非常严格,并且不想采用这种方法。

页面方法调用不会阻塞吗?仍然可以访问会话? (可能不是写而是只是读)

最佳答案

我认为,如果不实现自己的会话提供程序,您将无法做到这一点。有some info on this MSDN page


  ASP.NET应用程序本质上是
  多线程的。因为要求
  并行到达在
  从线程中提取并发线程
  池中,有可能两个或多个
  请求定位到同一会话
  将在同一时间执行。 (
  经典示例是当页面
  包含两个框架,每个框架针对一个
  同一个不同的ASPX
  应用程序,导致浏览器
  提交重叠的请求
  两页。)为避免数据冲突
  和不稳定的行为,提供者
  开始时“锁定”会话
  处理第一个请求,导致
  其他针对相同的请求
  会话等待锁来
  自由。
  
  因为允许
  并发执行请求
  读取重叠,锁是
  通常实现为
  读取器/写入器锁-即
  允许任意数量的线程读取
  会话,但可以避免重叠
  读写
  重叠的写。

关于c# - PageMethods和 session ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5110001/

10-09 22:58