2014-01-16 40 views
1

我遇到了難以描述的問題。我將從重現的步驟開始,然後繼續細節。因此,在一般的步驟:同時開始的兩個並行請求一個接一個地執行

  1. 經營的網站上長期運行的操作(變更申報狀態,POST)
  2. 嘗試在同一瀏覽器中打開另一個頁面,而另一個選項卡(表報告,GET)
  3. 嘗試打開同一個頁面上的步驟2,但使用其他瀏覽器/隱身模式下

這樣做的結果是: 比方說,第一個操作需要80秒,完成後,第二操作時間與第一個完全相同,但是,最感興趣的是什麼第三個完成不到1秒。所有3個請求都使用相同的憑據。

該應用程序使用ASP.NET MVC 3構建; IIS 8.5,.NET v4.5應用程序池。沒有數據庫鎖。

長時間運行的操作是對同一應用程序中託管的內部asmx Web服務(許多調用,一個接一個,平均執行時間爲1.5秒)進行調用。所有步驟都使用同一控制器的不同方法。

這裏是IIS log步驟(步驟1-線67,步驟2-線68步驟3-線14)。

儘管步驟3沒有任何延遲地執行,爲什麼通過運行步驟2有這樣的超時?


編輯:

感謝@arknotts,似乎這是一個會話鎖定。

只是想分享一些鏈接,這些誰都會面臨同樣的問題:

回答

1

默認情況下,ASP.NET只允許每次會話一次運行一個請求。在此期間的任何其他請求將排隊。當請求#1正在運行時,請求#2被阻塞,直到第一個完成。請求#3處理得很好,因爲它被分配了與其他會話不同的會話(通過使用隱身模式/其他瀏覽器)。你可以做兩件事情:

  • 禁用會話狀態
  • 如果禁用會話狀態是不是一種選擇,你需要生成的請求#1一個新的線程,並立即返回到瀏覽器。
相關問題