我已經搜索這個解決方案的高和低。任何見解將不勝感激。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