2011-02-11 42 views
7

我管理着一個相當大的項目,用asp.net webforms + mvc3編寫,擁有龐大的用戶羣,每天的訪客數量非常高。基本上,在任何特定時刻都有很多請求。MVC 3中的SessionState屬性是否正常工作?

我的一個MVC控制器,處理/的調整大小的飛行圖像應用了以下屬性吧:現在

[SessionState(SessionStateBehavior.Disabled)] 

,在控制器的動作試圖訪問會話 - 它顯然拋出一個例外 - 所以我們迄今爲止很好。

問題是:如果我進入IIS工作進程窗口(Win Server 2008 R2,IIS 7.5),並檢查當前的網站請求,我有時可以看到對此控制器中的操作的請求。他們目前的狀態鎖定在State: RequestAcquireState, Module Name: Session。有時候這些鎖在這種狀態下會持續一兩秒鐘。

是否首先向控制器發出請求的屬性的全部觀點忽略了狀態,而不是浪費時間(並且可能被鎖定)試圖獲取狀態?

如果這樣 - 我在這裏做錯了什麼,或者問題在別處?

+0

嗨萊維,你能否讓這個答案,以便我可以標記爲這樣? :) – 2011-02-14 10:42:14

回答

12

[從意見遷移]

如果您正在使用自定義控制器工廠或路由處理,確保他們知道控制器的會話狀態的行爲。將控制器標記爲不需要會話狀態需要來自這兩個組件的合作。開箱即用的是,DefaultControllerFactory和MvcRouteHandler被設計用於處理這個問題。有關更多信息,請參閱DefaultControllerFactory.GetControllerSessionBehavior和MvcRouteHandler.GetHttpHandler。如果您正在編寫自定義組件,則可以使用這些方法作爲靈感。

+1

很好的答案!我實際上使用了一個自IRouteHandler派生的自定義路由處理程序。我已經改變了我的處理程序來取代MvcRouteHandler,並確保使用基本實現和我的覆蓋。謝謝:) – 2011-02-16 09:56:49