我有一個菜單頁面。如果用戶選擇一個菜單項,它將使用JavaScript打開一個新的IE窗口。因此用戶可以在多個IE窗口中打開應用程序的不同部分。這些Windows具有相同的會話。 我的問題是這些頁面是同步訪問?如果其中一個子窗口正在等待要完成的操作,則不處理來自其他任何子窗口的其他請求。是因爲使用Session變量嗎?爲什麼我的asp.net頁面被同步訪問?
更新:這隻發生在具有相同父項的窗口上。如果我有不同父窗口的IE子窗口,那麼這個問題就不存在了。
我有一個菜單頁面。如果用戶選擇一個菜單項,它將使用JavaScript打開一個新的IE窗口。因此用戶可以在多個IE窗口中打開應用程序的不同部分。這些Windows具有相同的會話。 我的問題是這些頁面是同步訪問?如果其中一個子窗口正在等待要完成的操作,則不處理來自其他任何子窗口的其他請求。是因爲使用Session變量嗎?爲什麼我的asp.net頁面被同步訪問?
更新:這隻發生在具有相同父項的窗口上。如果我有不同父窗口的IE子窗口,那麼這個問題就不存在了。
是的,如果每個頁面都在使用會話,那麼asp.net會對它進行序列化。如果這些子頁面中的一個或多個只需要只讀訪問權限,那麼在@Page指令中標記(例如EnableSessionState =「ReadOnly」),或者如果不使用會話信息,則將其完全關閉。
通常,在服務器上掛起長時間運行的活動是一個糟糕的計劃,正如您發現的那樣,如果他們使用會話尤其如此。
編輯 最後一個FAQ here也描述了這個序列化。
編輯2 針對評論回覆:關閉子窗口:
它最終將處理其他請求,一旦請求,無論它一直工作在服務器端處理結束。關閉子窗口不是在服務器端中止請求。最好能夠希望的是,長時間運行的請求有機會每隔一段時間檢查一次IsClientConnected,如果它不再相關,就中止處理。
+1>還有其他問題。假設我關閉一個子窗口而不讓它完成它正在做的事情,那麼根本就沒有處理其他請求。 – Amitabh 2010-03-03 15:19:21
從服務器的角度來看,您絕對沒有辦法知道客戶端打開了多少個瀏覽器窗口。
所以,不,它們不是同步的。
您是否閱讀過該問題? – 2010-03-03 15:02:38
你使用window.open()打開一個新的窗口? – 2010-03-03 14:57:09
無論是客戶端/ JavaScript問題,還是您在服務器中鎖定了某些內容,他們都在等待某種資源。你是否手動鎖定任何東西? – 2010-03-03 14:57:19
我對這種情況如何發生不知所措,你確定這是事實嗎?我發現很難相信,以便您的頁面以這種方式真正同步運行,這是唯一的方法,我甚至可以遠程看到,如果您希望在共享資源上使用長時間運行的鎖,就可以實現該目的。 – 2010-03-03 14:58:18