2012-09-04 91 views
6

我有一個應用程序有一些控制器的操作調用緩慢的第三方Web服務。這些操作使用來自頁面的AJAX調用進行調用。ASP.NET MVC:如何防止會話鎖?

我可以使用異步控制器來釋放ASP.NET線程池,這很好。但會話呢?如果我使用InProc會話和請求「緩慢行動」,則特定用戶無法嚮應用程序發出任何請求,因爲他的會話通過首次「慢速」呼叫被鎖定。

在PHP中有一種方法session_write_close(),我可以爲以下用途:基於會話數據

  1. 接受用戶的請求,以減緩行動
  2. 用戶的檢查權限訪問控制器/動作
  3. 如果需要的話,寫一些東西給會話
  4. 致電session_write_close()從這點會議是由該請求,並從同一用戶的任何其他請求,關閉可以訪問它
  5. 讓我慢調用(也許在某些異步方式)

我知道我可以禁用會話狀態在控制器級別使用[SessionState]屬性,但這不是解決方案。

任何想法?

+0

任何請求? –

+0

這裏是詳細信息:http://stackoverflow.com/questions/3666556/a-non-locking-in-process-asp-net-session-state-store和這裏另一個類似的話題我的問題:http:// stackoverflow.com/questions/2438493/the-whole-site-is-blocked-while-one-page-is-waiting-for-blocking-operation-php – artvolk

+0

這裏是一個最終描述:http://stackoverflow.com/ question/3629709/i-just-discovered-why-all-asp-net-websites-are-slow-and-i-am-trying-to-work-out- – artvolk

回答

0

我認爲這可能是幾種情況。

1)使控制器工廠的變化和改變它來生產無會話,或者與一些custome會話實現contorllers

2)儘量爲什麼你認爲會被「鎖定」通過閱讀這篇article about sessionless controllers

+0

改變會話實現似乎不是一個好主意,無會話在我的問題中提到了控制者。這是一個「每個動作」的實現:http://sapoval.org/per-action-custom-sessionstateattribute – artvolk