2013-06-01 66 views
2

我們正試圖改變我們在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分鐘,或者會話提供程序是否執行正確的操作,而不管默認的命名緩存設置如何?如果我還需要調整命名緩存設置,它們應該是什麼?

+0

一位值得信賴的Azure技術支持人員寫道:「由於您很可能知道會話對象就像存儲在緩存中的任何其他對象一樣,所以如果您正在爲ASP.NET應用程序配置會話超時,您還應該確保在緩存中的會話對象沒有得到逐出或過期,當你需要的時候,你還需要有高可用性(HA)對任何災難恢復功能。所以,是的,你應該重寫緩存相關的設置,你已經做了你提供的樣本,以獲得最佳體驗。「 – CAK2

+0

於是,我改變了默認命名Cache驅逐設置爲「無」,過期類型爲「滑動窗口」,並活到「60」分鐘的時間。希望這會保持我的會話對象正常運行。 – CAK2

+0

似乎正在工作。現在幾個月的生產中沒有出現意外的會話超時問題。 – CAK2

回答

0

根據找到的文檔here,Azure緩存的ASP.NET會話狀態提供程序顯式設置每個對象的到期時間,覆蓋配置的緩存過期時間。因此,這聽起來像你只需要擔心設置適當的驅逐政策,並且國家提供者管理到期和生存時間。以下是相關摘錄:

在共享緩存中,過期總是絕對的,並且無法設置默認過期時間。共享緩存中的項目在48小時後過期。但是,您可以使用Put和Add方法在代碼中設置顯式的到期時間。請注意,ASP.NET提供程序自動使用這些重載爲會話狀態和輸出緩存提供顯式超時。在任何一種情況下,當緩存大小超過共享緩存產品的限制時,緩存中最近最少使用的項目將被逐出。

相關問題