2012-07-12 36 views
1

在我們的應用程序頁面送達隨後應該做一堆的並行更多的數據異步調用的。這些調用正在排隊,並且我讀取使用同一會話的調用正在排隊,因爲有多個請求寫入同一個會話可能會導致併發症。無併發儘管SessionStateBehaviour

我還讀了一個控制器可以設置爲[SessionState(SessionStateBehavior.Disabled)][SessionState(SessionStateBehavior.ReadOnly)]如果無會話或我們不需要寫入會話。

我嘗試了這些,因爲我並不需要寫入會話所以我請求將同時兼任,或者如果我用的是會議沒有意識到這一點,一個異常將被拋出。

這些都不是這樣的。來自同一用戶的請求仍在排隊。

我如何驗證我的指令[SessionState(SessionStateBehavior.ReadOnly)]被尊重? 什麼可能導致此問題?

如果它是相關的,我們的Orchard範圍內工作。

+0

出於測試目的,完全禁用會話並查看它是否有效:在您的web.config中設置''。 – 2012-07-12 14:53:35

+0

但是,其他控制器的一些請求確實需要會話...但也許我可以嘗試一下。 – carrier 2012-07-12 14:57:37

+0

試一試。你會看到沒有會話會有多好:-)你的應用程序將是RESTFul和無狀態的,這是所有Web應用程序設計的方式。 – 2012-07-12 14:58:51

回答

1

這是因爲用於每個烏節路由請求的基礎HTTP處理程序正在實現IRequiresSessionState接口。這是每個請求實際排隊的原因...

這是一個已知的問題,我們將試圖解決在下一個果園版本,只要它不會意味着一個突破的變化。有幾個核心功能(以及未知數量的外部自定義功能)依賴於(或可能依賴)Session,因此簡單移除IRequiresSessionState接口不是一種選擇。我們需要首先重構事物並實施一些選擇加入/退出機制。

2

在果園1.6你可以設置SessionState財產的RouteDescriptorSessionStateBehavior.ReadOnlySessionStateBehavior.Disabled

所以你所要做的就是在你的Routes類中創建一個新的路線,該路線映射到你的控制器並具有上述SessionStateBehaviors之一。之後您不需要用SessionState屬性修飾控制器。