Azure 托管缓存服务的会话状态提供程序

重要

Microsoft 建议所有新开发使用 Azure Redis 缓存。 有关选择 Azure 缓存产品/服务的当前文档和指南,请参阅 哪种 Azure 缓存产品/服务适合我?

Microsoft Azure缓存会话状态提供程序是 ASP.NET 应用程序的进程外存储机制。 此提供程序使你能够在缓存中(而非在内存或 SQL Server 数据库中)存储会话状态。

有关会话状态缓存的示例,请参阅缓存会话状态和输出Caching示例

功能

Microsoft Azure缓存会话状态提供程序在过去 ASP.NET 会话状态提供程序中进行了以下改进:

  • 它在内部使用 NetDataContractSerializer 类进行会话状态序列化。

  • 它可以在不同的 ASP.NET 应用程序之间共享会话状态。

  • 它支持同时访问多个读取程序和单个写入程序的同一个会话状态集。

  • 它可以通过缓存客户端属性使用压缩。

使用 NetDataContractSerializer 类进行序列化将带来对更多可序列化类型的支持, 其中包括对二进制可序列化类型的支持。

此提供程序仅支持不同 ASP.NET 应用程序读取和写入相同会话状态数据的功能。 例如,开发人员有两个不同的 ASP.NET 网站:/contoso 和 /adventureworks。 可以在每个 Web 应用程序中将会话状态提供程序配置为指向缓存中的同一会话状态存储。 因此,两种应用程序都将读取和写入任何给定会话标识符的同一会话数据。

会话状态提供程序支持同时访问多个读取程序和单个写入程序的同一会话状态集。 在此情况下,读取程序按定义是指已标记为使用“只读”会话状态的页面。 如果应用程序的大多数会话状态访问模式仅要求只读权限就能访问会话状态,则过度使用 AJAX 回调的应用程序将不会遇到服务器端请求排队的情况。

将会话状态提供程序添加到 ASP.NET 项目

  1. 首先,请配置一个用于 ASP.NET 提供程序的缓存。

  2. 使用NuGet向Visual Studio中的 ASP.NET 项目添加缓存支持。

    重要

    执行这些步骤需要安装 NuGet Package Manager(2.6.40627.9000 或更高版本)。 若要安装最新的NuGet 程序包管理器,请参阅NuGet 程序包管理器

  3. 删除配置会话状态缓存的任何现有 sessionState 元素。 请勿删除NuGet包添加的注释的 sessionState 节。

  4. 在web.config文件中,取消注释 sessionState 节。

    <!-- 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>-->
    

以下列表提供了会影响会话状态提供程序的可选配置更改。

  • 使用 add 元素的 cacheName 属性更改目标命名缓存。

  • 使用 add 元素的 dataCacheClientName 属性更改缓存客户端设置的源。 将此属性设置为 web.config 文件中现有 dataCacheClient 节的名称。

  • 通过更改关联的 dataCacheClient 节中的设置来修改缓存客户端的行为。 例如,使用 isCompressionEnabled 属性启用压缩。

    <dataCacheClient name="default" isCompressionEnabled="true">
      <!-- Other cache settings omitted -->
    </dataCacheClient>
    

    有关可用配置选项的列表,请参阅 Azure 托管缓存服务的缓存客户端配置设置。 请注意,用于缓存的 ASP.NET 提供程序不支持二进制或自定义序列化类型。 如果这些序列化程序用于会话状态,则会发生以下异常:“程序集”Microsoft.Web.DistributedCache.SerializableSessionStateStoreData“中的”类型为“Microsoft.Web.DistributedCache,Version=101.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”未标记为可序列化

  • 更改会话状态提供程序的设置。 有关可用配置选项的列表,请参阅 ASP.NET 适用于 Azure 托管缓存服务的会话状态提供程序配置设置

本节内容