我們正試圖改變我們在Azure中ASP.NET會話狀態超時,並已注意到的方式ASP.NET會話過期,並命名緩存設置之間的脫節。這將足以改變對Azure的自定義會話狀態提供者在web.config的sessionState超時屬性還是我們需要改變服務配置命名高速緩存設置影響會話超時?ASP.NET會話狀態提供程序的Azure命名緩存設置?
根據MSDN,所述HttpSessionState.Timeout屬性是的時間量,以分鐘爲單位,允許請求之間的會話狀態提供終止會話之前。這意味着所有的Session對象在每個帶有SessionID的請求之後都會獲得新的契約。
我們的Windows Azure的ASP.NET應用程序是由兩個生產實例支持和配置爲維護會話狀態在通過會話狀態提供程序爲Windows Azure緩存分佈式協同定位緩存。下面是配置自定義會話狀態提供程序的web.config文件片段:
<!-- Windows Azure Caching session state provider -->
<sessionState mode="Custom" customProvider="AFCacheSessionStateProvider">
<providers>
<add name="AFCacheSessionStateProvider" type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache" cacheName="default" dataCacheClientName="default" applicationName="AFCacheSessionState"/>
</providers>
</sessionState>
<!-- Windows Azure Caching output caching provider -->
<caching>
<outputCache defaultProvider="AFCacheOutputCacheProvider">
<providers>
<add name="AFCacheOutputCacheProvider" type="Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider, Microsoft.Web.DistributedCache" cacheName="default" dataCacheClientName="default" applicationName="AFCacheOutputCache" />
</providers>
</outputCache>
</caching>
以上設置在ASP.NET Session State Provider Configuration Settings (Windows Azure Caching)定義。我們正在使用默認的dataCacheClientName。在Web角色屬性的「緩存」選項卡上配置默認緩存和任何其他指定的緩存。 GUI提供了一種友好的方式來維護命名緩存設置,這些設置以高度不可讀的方式存儲在所選服務配置的.cscfg文件中。注意默認緩存的驅逐策略,過期類型和生存時間屬性。這些屬性定義在How to Use Windows Azure Caching。它們意味着每個緩存對象都有其自己的生命週期,而Session對象應該全部持續存在,直到ASP.NET會話過期。我是否需要更改命名緩存設置,以便將sessionState超時擴展到60分鐘,或者會話提供程序是否執行正確的操作,而不管默認的命名緩存設置如何?如果我還需要調整命名緩存設置,它們應該是什麼?
一位值得信賴的Azure技術支持人員寫道:「由於您很可能知道會話對象就像存儲在緩存中的任何其他對象一樣,所以如果您正在爲ASP.NET應用程序配置會話超時,您還應該確保在緩存中的會話對象沒有得到逐出或過期,當你需要的時候,你還需要有高可用性(HA)對任何災難恢復功能。所以,是的,你應該重寫緩存相關的設置,你已經做了你提供的樣本,以獲得最佳體驗。「 – CAK2
於是,我改變了默認命名Cache驅逐設置爲「無」,過期類型爲「滑動窗口」,並活到「60」分鐘的時間。希望這會保持我的會話對象正常運行。 – CAK2
似乎正在工作。現在幾個月的生產中沒有出現意外的會話超時問題。 – CAK2