共用方式為


Azure Cache for Redis 的 ASP.NET 工作階段狀態提供者 (機器翻譯)

Azure Cache for Redis 提供工作階段狀態提供者,可讓您用來將記憶體內部工作階段狀態儲存在 Azure Cache for Redis 中,而不是 SQL Server 資料庫中。 若要使用快取工作階段狀態提供者,請先設定快取,再使用「Azure Cache for Redis 工作階段狀態 NuGet 套件」設定 ASP.NET 應用程式的快取。 針對 ASP.NET Core 應用程式,請閱讀 ASP.NET Core 中的工作階段和狀態管理

在雲端應用程式中,避免儲存使用者工作階段某種形式的狀態通常並非理想做法,但某些方法會比其他方法更加影響效能和可擴縮性。 如果您需要儲存狀態,最好的方法是將狀態的數量控制得較低,並將其儲存在 Cookie 中。 如果此方法不可行,次佳的方法是使用 ASP.NET 工作階段狀態搭配提供者,進行分散式的記憶體中快取。 從效能和可擴縮性的觀點來看,最差的解決方法是使用資料庫備份的工作階段狀態提供者。 本文提供使用 Azure Cache for Redis 的 ASP.NET 工作階段狀態提供者的指導。 如需其他工作階段狀態選項的相關資訊,請參閱 ASP.NET 工作階段狀態選項

將 ASP.NET 工作階段狀態儲存在快取中

若要在 Visual Studio 中使用「Azure Cache for Redis 工作階段狀態」NuGet 套件來設定用戶端應用程式,請從 [工具] 功能表中,依序選取 [NuGet 套件管理員] 和 [套件管理員主控台]

Package Manager Console 視窗執行下列命令。

Install-Package Microsoft.Web.RedisSessionStateProvider

重要

如果您使用進階層的叢集功能,則必須使用 RedisSessionStateProvider 2.0.1 或更高版本,否則會擲回例外狀況。 移至 2.0.1 或更高版本是中斷性變更。

「Redis 工作階段狀態提供者 NuGet 套件」對「StackExchange.Redis 套件」有相依性。 如果專案中沒有 StackExchange.Redis 套件,代表已經安裝。

NuGet 封裝會下載和加入必要的組件參考,並將下列區段加入您的 web.config 檔案。 此區段包含讓您的 ASP.NET 應用程式使用 Azure Cache for Redis 工作階段狀態提供者所需的設定。

<sessionState mode="Custom" customProvider="MySessionStateStore">
  <providers>
    <!-- Either use 'connectionString' OR 'settingsClassName' and 'settingsMethodName' OR use 'host','port','accessKey','ssl','connectionTimeoutInMilliseconds' and 'operationTimeoutInMilliseconds'. -->
    <!-- 'throwOnError','retryTimeoutInMilliseconds','databaseId' and 'applicationName' can be used with both options. -->
    <!--
      <add name="MySessionStateStore" 
        host = "127.0.0.1" [String]
        port = "" [number]
        accessKey = "" [String]
        ssl = "false" [true|false]
        throwOnError = "true" [true|false]
        retryTimeoutInMilliseconds = "5000" [number]
        databaseId = "0" [number]
        applicationName = "" [String]
        connectionTimeoutInMilliseconds = "5000" [number]
        operationTimeoutInMilliseconds = "1000" [number]
        connectionString = "<Valid StackExchange.Redis connection string>" [String]
        settingsClassName = "<Assembly qualified class name that contains settings method specified below. Which basically return 'connectionString' value>" [String]
        settingsMethodName = "<Settings method should be defined in settingsClass. It should be public, static, does not take any parameters and should have a return type of 'String', which is basically 'connectionString' value.>" [String]
        loggingClassName = "<Assembly qualified class name that contains logging method specified below>" [String]
        loggingMethodName = "<Logging method should be defined in loggingClass. It should be public, static, does not take any parameters and should have a return type of System.IO.TextWriter.>" [String]
        redisSerializerType = "<Assembly qualified class name that implements Microsoft.Web.Redis.ISerializer>" [String]
      />
    -->
    <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider"
         host=""
         accessKey=""
         ssl="true" />
  </providers>
</sessionState>

標示註解的區段可提供屬性的範例和每個屬性的範例設定。

以來自 Microsoft Azure 入口網站之快取的左側值來設定屬性,並視需要設定其他值。 如需關於存取快取屬性的指示,請參閱設定 Azure Cache for Redis 設定

  • 主機 – 指定您的快取端點。
  • 連接埠 – 使用非 TLS/SSL 連接埠或 TLS/SSL 連接埠,依 TLS 設定而定。
  • accessKey – 用於快取的主要或次要金鑰。
  • ssl – 如果您想要使用 TLS 保護快取/用戶端通訊,則為 true,否則為 false。 請務必指定正確的連接埠。
    • 預設會為新快取停用非 TLS 連接埠。 請於此設定指定為 true,以使用 TLS 連接埠。 如需啟用非 TLS 連接埠的詳細資訊,請參閱設定快取文章中的存取連接埠一節。
  • throwOnError – true (如果您想在發生失敗時擲出例外狀況) 或 false (如果您想在作業失敗時為無訊息模式)。 您可以核取靜態 Microsoft.Web.Redis.RedisSessionStateProvider.LastException 屬性以檢查失敗。 預設值為 True。
  • retryTimeoutInMilliseconds – 會在此間隔期間 (以毫秒指定) 重試失敗的作業。 會在 20 毫秒後發生第一次重試,然後每秒發生重試,直到 retryTimeoutInMillisecond 間隔到期為止。 緊接著此間隔之後,作業會進行最後一次重試。 如果作業仍失敗,則會依據 throwOnError 設定將例外狀況擲回給呼叫者。 預設值為 0,表示不會重試。
  • databaseId – 指定快取輸出資料所使用的資料庫。 若未指定,就會使用預設值 0。
  • applicationName – 金鑰在 redis 中會儲存為 {<Application Name>_<Session ID>}_Data。 這個命名配置可讓多個應用程式共用同一個 Redis 執行個體。 此參數是選擇性的,如果您未提供,將會使用預設值。
  • connectionTimeoutInMilliseconds – 此設定可讓您覆寫 StackExchange.Redis 用戶端中的 connectTimeout 設定。 若未指定,將會使用預設的 connectTimeout 設定為 5000。 如需詳細資訊,請參閱 StackExchange.Redis 設定模型(英文)。
  • operationTimeoutInMilliseconds – 此設定可讓您覆寫 StackExchange.Redis 用戶端中的 syncTimeout 設定。 如果未指定,就會使用預設 syncTimeout 設定 1000。 如需詳細資訊,請參閱 StackExchange.Redis 設定模型(英文)。
  • redisSerializerType - 此設定可讓您為傳送到 Redis 的工作階段內容指定自訂序列化。 指定的類型必須實作 Microsoft.Web.Redis.ISerializer 且必須宣告公用無參數建構函式。 預設會使用 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter

如需這些屬性的相關詳細資訊,請參閱 發佈 Redis 的 ASP.NET 工作階段狀態提供者(英文) 上的原始部落格文章公告。

別忘記將您 web.config 中標準 InProc 工作階段狀態提供者區段註解化。

<!-- <sessionState mode="InProc"
     customProvider="DefaultSessionProvider">
     <providers>
        <add name="DefaultSessionProvider"
              type="System.Web.Providers.DefaultSessionStateProvider,
                    System.Web.Providers, Version=1.0.0.0, Culture=neutral,
                    PublicKeyToken=31bf3856ad364e35"
              connectionStringName="DefaultConnection" />
      </providers>
</sessionState> -->

執行了這些步驟後,您的應用程式就會設定為使用 Azure Cache for Redis 工作階段狀態提供者。 當您在應用程式中使用工作階段狀態時,該狀態會儲存在 Azure Cache for Redis 執行個體中。

重要

儲存在快取中的資料必須可序列化,這一點與可以儲存在預設記憶體中 ASP.NET 工作階段狀態供應器的資料不同。 使用 Redis 的工作階段狀態提供者時,請確定儲存在工作階段狀態中的資料類型為可序列化。

ASP.NET 工作階段狀態選項

  • 記憶體中工作階段狀態提供者 – 此提供者會將工作階段狀態儲存在記憶體中。 使用此提供者的好處是其既簡單又快速。 不過,您在使用記憶體中提供者時將無法調整 Web Apps,因為其不是分散式的。
  • SQL Server 工作階段狀態提供者 – 此提供者會將工作階段狀態儲存在 SQL Server 中。 如果您想要在永續性儲存體中儲存工作階段狀態,請使用此供應器。 您可以調整 Web 應用程式,但將 SQL Server 用於工作階段,會對 Web 應用程式的效能造成影響。 您也可以使用此提供者搭配記憶體內部 OLTP 組態,協助改善效能。
  • 分散式記憶體中工作階段狀態提供者,例如 Azure Cache for Redis 工作階段狀態提供者 – 此提供者可讓您同時兼顧兩方面。 您的 Web 應用程式可擁有簡單、快速而可調整的工作階段狀態供應器。 因為此供應器會將工作階段狀態儲存在快取中,您的應用程式必須考量與分散式記憶體中快取 (例如暫時性網路失敗) 通訊時的所有相關特性。 如需使用快取的最佳做法,請參閱 Microsoft 模式和做法 Azure 雲端應用程式設計和實作指引中的快取指引

如需工作階段狀態和其他最佳作法的相關詳細資訊,請參閱 Web 開發最佳作法 (使用 Azure 建置實際的雲端應用程式)(英文)。

協力廠商工作階段狀態提供者

下一步

查看 Azure Cache for Redis 的 ASP.NET 輸出快取提供者