我已经搜索这个解决方案的高和低。任何见解将不胜感激。PageMethods和Session
情况:当在一个页面中存在多个PageMethod调用时,每个方法调用都会阻塞Session对象的锁。该PageMethod的调用可以异步仅取得与@Page
指令转向False|ReadOnly
发现:当Page
指令是默认(读/写),但会议没有显示在页面上的任何地方使用时,呼叫不被阻塞。任何读取或写入页面级别的会话都会阻止pagemethod调用。
问题:在@Page
指令中制作EnableSessionState=ReadOnly
限制性很强,不想采用该路线。
pagemethod调用不能阻止吗?并仍然访问会话? (可能不是写但只是读)
那么,为什么使用PageMethods详细?为什么不创建WCF服务来满足您的需求? – 2011-02-24 20:39:04
我的猜测是会话不是线程安全的,所以PageMethods会因为它们不在正常的请求/响应周期而被阻止 - 许多PageMethods可以在用户正在查看的页面的同一时间被调用。是否有必要频繁地调用你的PageMethods?你能改变设计吗? http://programminglife.wordpress.com/2009/05/18/how-to-do-parallel-work-with-pagemethods/似乎通过实施异步模式提供解决方法。页面底部的评论甚至表示,如果从Global.asax中删除Session_Start/Session_End处理程序,会话将不会被锁定。 – WiseGuyEh 2011-02-25 00:10:59
@WiseGuyEh:上面的链接确保PageMethod调用是真正并行的,并且Session可用于页面(所以不能将@Page EnableSessionState设置为ReadOnly) - 但BeginInvoke创建一个新线程,而该线程不是会话因为它不是页面循环的一部分。 – 2011-02-25 18:40:24