2011-05-11 114 views
3

我有我的網站(ASP.Net 4.0 C#)託管在具有多個實例的Azure服務器上。我的會話狀態模式是「InProc」。不知何故,它不適用於Azure實例,它不能正確維護狀態。請指教。Azure和進程會話

問候 維韋克

回答

8

如果你有多個實例,並使用InProc會話,然後會話數據將無法正常工作 - 因爲它不會跨實例共享。

Azure負載均衡您的HTTP請求,並可能將每個客戶端HTTP請求發送到不同的服務器實例。

如果你想使用會話狀態,那麼你就需要使用一個共享的會話狀態提供者,如:

  • 的SQL會話狀態提供者(雖然我相信這對SQL Azure的一些限制,因爲它不能使用的SQLAgent代碼定期清除狀態)
  • 示範Azure Table中會話狀態提供者(不正式支持,有時報告爲越野車)
  • 最新的AppFabric會話狀態提供者(目前由MS推薦) - 見http://appfabricdemos.codeplex.com/releases/view/65427
+0

我想補充說我爲Azure開發了一個會話狀態提供程序,它是開源的,可以從這裏下載http://azureproviders.codeplex.com/ – 2011-07-18 12:50:28

3

添加到Stuart的答案:AppFabric緩存是緩存即服務,不受任何虛擬機實例的影響。這項服務幾個星期前就開始了。 AppFabric團隊提供使用緩存的會話狀態提供程序,只需簡單的web.config複製粘貼。

由於斯圖爾特提到的原因,我不會依賴SQL Azure或表存儲來獲得會話緩存。

有一個很好的動手在Windows Azure Platform Training Kit稱爲構建Windows Azure應用程序與緩存服務實驗室 - 使用AppFabric的緩存我會去通過,作爲主題之一是配置會話狀態。

我在this SO answer提供了更多信息。