我已经搜索了这个解决方案的高低。任何见解都将受到高度赞赏。
情况:当在单个页面中有多个PageMethod调用时,每个方法调用都会对Session对象进行锁定,从而阻塞。只有将@Page
指令转为False|ReadOnly
调查结果:当Page
指令是默认值(读/写)但会话未在页面的任何位置使用时,不会阻止调用。在页面级别对会话的任何读取或写入都会阻止页面方法调用。
问题:在EnableSessionState=ReadOnly
指令处设置@Page
是非常严格的,并且不想采用该路线。
pagemethod调用不能阻止吗?并仍然访问会话? (可能不是写但只是阅读)
答案 0 :(得分:2)
我不相信你可以在没有实现自己的会话提供程序的情况下做到这一点。有some info on this MSDN page。
ASP.NET应用程序本质上是 多线程。因为要求 并行到达处理 从线程中提取的并发线程 游泳池,有可能是两个或更多 针对同一会话的请求 将同时执行。 (该 经典的例子是当一个页面 包含两个帧,每个帧都以a为目标 不同的ASPX在同一个 应用程序,导致浏览器 提交重叠请求 两页。)避免数据冲突 提供者和不稳定的行为 会话开始时“锁定”会话 处理第一个请求,导致 针对相同的其他请求 会话等待锁定来 免费。
因为允许没有害处 并发请求执行 重叠读,锁是 通常实现为 读/写锁 - 就是那个 允许任意数量的线程读取 会话,但这可以防止重叠 读写以及 重叠写作。
答案 1 :(得分:0)