我已经到处寻找这个解决方案了。任何见解都将受到高度赞赏。
情况:当单个页面中有多个PageMethod调用时,每个方法调用都持有对会话对象的锁定,从而阻塞。仅当@Page指令转换为False|ReadOnly时,才能异步执行PageMethod调用
发现:当Page指令是默认的(读/写),但页面上的任何地方都没有使用会话时,调用不会被阻塞。在页面级对会话的任何读或写操作都会阻塞pagemethod调用。
问题是:在@Page指令中创建EnableSessionState=ReadOnly是非常严格的,并且不想走这条路。
pagemethod调用可以不被阻塞吗?还能访问会话吗?(可能不是写入,而只是读取)
发布于 2011-03-07 22:19:24
发布于 2011-03-06 21:42:10
如果不实现自己的会话提供程序,我不相信你能做到这一点。那是some info on this MSDN page。
ASP.NET应用程序本质上是多线程的。因为并行到达的请求是在从线程池中提取的并发线程上处理的,所以两个或更多针对同一会话的请求可能会同时执行。(经典的示例是页面包含两个框架,每个框架针对同一应用程序中的不同ASPX,导致浏览器提交对这两个页面的重叠请求。)为了避免数据冲突和不稳定的行为,提供程序在开始处理第一个请求时“锁定”会话,导致其他以同一会话为目标的请求等待锁释放。
因为允许并发请求执行重叠读取没有坏处,所以锁通常实现为读取器/写入器锁-即允许任意数量的线程读取会话,但防止重叠读取和写入以及重叠写入的锁。
https://stackoverflow.com/questions/5110001
复制相似问题