2013-02-11 63 views
1

我有一個MVC的網站使用AD身份驗證,以顯示2011年用戶的CRM的權利,均由其在CRM角色確定也是用戶CRM數據,因此目前OnActionExecuting方法獲取執行用戶的域名,查詢CRM的角色。如果他們沒有有效的角色,則會返回無效的權限視圖。是否可以緩存我的自定義ActionFilterAttribute的結果?

到CRM的呼叫是緩慢的,並能得到昂貴的,如果它發生的每一個請求。我可以在MVC 3 release notes看到這些過濾器被積極地緩存,但不太清楚這對我意味着什麼。

我希望能夠根據自己的域名緩存用戶的權利,但它聽起來像是可能已經發生?

回答

2

如果你是referring to following statement,我想你已經明白了這一點錯誤:

在ASP.NET MVC 3,過濾器更積極緩存。因此, 任何不正確地存儲實例狀態的自定義操作篩選器可能會被破壞。

這並不意味着,過濾器的結果被緩存。這意味着過濾器本身將被緩存,並將被重複用於多個請求。它與CRM插件相媲美。你不應該跟蹤它的狀態,或者如果你這樣做,你必須小心,不要輸入併發的樂趣。

在你的情況我會使用,例如MemoryCache緩存用戶的角色/特權內存一段時間。

+0

所以單個ActionFilterAttribute對象可以被創建並通過由不同用戶的多個請求使用? – Daryl 2013-02-12 13:14:25

+0

@Daryl是的,正好。 – ccellar 2013-02-12 13:22:48

+0

我想在處理webfarms時,使用MemoryCache不會對任何用戶特定的數據有好處。您可以創建6個不同的請求,並打6個不同的服務器,所有6個都需要填充緩存。真的,我需要使用會話,因爲它們將在服務器場中的所有服務器之間共享(假設它是以這種方式配置的)。 – Daryl 2013-02-13 15:19:19

相關問題