PageMethods和Session

我已经搜索了这个解决方案的高低。 任何见解将受到高度赞赏。

情况:当在单个页面中有多个PageMethod调用时,每个方法调用都会对Session对象进行锁定,从而阻塞。 只有将@Page指令转为False|ReadOnly才能使PageMethod调用异步

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

问题:在@Page指令@Page EnableSessionState=ReadOnly是非常严格的,并且不想采用该路由。

pagemethod调用可以阻止吗? 并仍然访问会话? (可能不是写但只是阅读)

如果不实现自己的会话提供程序,我不相信你能做到这一点。 这个MSDN页面上有一些信息 。

ASP.NET应用程序本质上是multithreading的。 因为并行到达的请求是在从线程池中提取的并发线程上处理的,所以针对同一会话的两个或多个请求可能会同时执行。 (典型的例子是当一个页面包含两个帧时,每个帧都针对同一个应用程序中的不同ASPX,导致浏览器提交两个页面的重叠请求。)为了避免数据冲突和不稳定的行为,提供者“锁定”会话当它开始处理第一个请求时,导致针对同一会话的其他请求等待锁定释放。

因为允许并发请求执行重叠读取没有坏处,所以锁通常实现为读取器/写入器锁 – 即允许任意数量的线程读取会话但是防止重叠读取和写入以及重叠的锁定写道。

在异步设计中的会话中详细解释