我一直在寻找这种解决方案。任何见解将不胜感激。
情况:当在一个页面中有多个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/