将 Azure 应用服务中的 Azure Redis 缓存用于会话状态

Note

本文涉及的 SDK 和工具是在 Microsoft Corporation 运行的 Azure 服务中使用的,而在中国, Azure 是由 21Vianet 运行的。 请根据需要参阅中国区 Azure 应用程序开发说明

本主题说明如何将 Azure Redis 缓存服务用于会话状态。

如果你的 ASP.NET Web 应用程序使用会话状态,则你需要设置外部会话状态提供程序(可为 Redis 缓存服务或 SQL Server 会话状态提供程序)。 如果你使用会话状态,但未使用外部提供程序,则你的 Web 应用程序只能限定为一个实例。 Redis 缓存服务是最快最简单的启用方式。

Note

尽管本文中指的是 Web 应用,但内容同样适用于 API 应用和移动应用。

创建缓存

按照这些指示创建缓存。

将 RedisSessionStateProvider NuGet 包添加到 Web 应用程序

安装 NuGet RedisSessionStateProvider 包。 从包管理器控制台(“工具” > “NuGet 包管理器” > “包管理器控制台”)使用以下命令进行安装:

PM> Install-Package Microsoft.Web.RedisSessionStateProvider

要从“工具”“NuGet 包管理器” > “NuGet 包管理器” > “管理解决方案的 NuGet 包”进行安装,请搜索 RedisSessionStateProvider

有关详细信息,请参阅 NuGet RedisSessionStateProvider 页配置缓存客户端

修改 Web.config 文件。

除了为缓存生成程序集引用,NuGet 包还在 web.config 文件中添加存根项。

  1. 打开 web.config 并查找 sessionState 元素。
  2. 输入 hostaccessKeyport 的值(SSL 端口应为 6380),并将 SSL 设置为 true。 可以从 Azure 门户边栏选项卡为缓存实例获取这些值。 有关详细信息,请参阅连接到缓存。 请注意,默认情况下,将为新缓存禁用非 SSL 端口。 有关启用非 SSL 端口的详细信息,请参阅在 Azure Redis 缓存中配置缓存主题中的访问端口部分。 以下标记显示了对 web.config 文件所做的更改,具体而言,是对 porthost、accessKey* 和 ssl 的更改。

       <system.web>;
         <customErrors mode="Off" />;
         <authentication mode="None" />;
         <compilation debug="true" targetFramework="4.5" />;
         <httpRuntime targetFramework="4.5" />;
         <sessionState mode="Custom" customProvider="RedisSessionProvider">;
           <providers>;  
               <!--<add name="RedisSessionProvider" 
                 host = "127.0.0.1" [String]
                 port = "" [number]
                 accessKey = "" [String]
                 ssl = "false" [true|false]
                 throwOnError = "true" [true|false]
                 retryTimeoutInMilliseconds = "0" [number]
                 databaseId = "0" [number]
                 applicationName = "" [String]
               />;-->;
              <add name="RedisSessionProvider" 
                   type="Microsoft.Web.Redis.RedisSessionStateProvider" 
                   port="6380"
                   host="movie2.redis.cache.chinacloudapi.cn" 
                   accessKey="m7PNV60CrvKpLqMUxosC3dSe6kx9nQ6jP5del8TmADk=" 
                   ssl="true" />;
           <!--<add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="127.0.0.1" accessKey="" ssl="false" />;-->;
           </providers>;
         </sessionState>;
       </system.web>;
    

在代码中使用 Session 对象

最后一步是开始在 ASP.NET 代码中使用 Session 对象。 通过使用 Session.Add 方法将对象添加到会话状态。 此方法使用键值对在会话状态缓存中存储项。

string strValue = "yourvalue";
Session.Add("yourkey", strValue);

下面的代码从会话状态中检索该值。

object objValue = Session["yourkey"];
if (objValue != null)
   strValue = (string)objValue;    

还可以使用 Redis 缓存在 Web 应用程序中缓存对象。 有关详细信息,请参阅 15 分钟学会创建包含 Azure Redis 缓存的 MVC 影片应用。 有关如何使用 ASP.NET 会话状态的更多详细信息,请参阅 ASP.NET 会话状态概述

发生的更改