Azure 角色中缓存中的 ASP.NET 会话状态提供程序配置设置

重要

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

本主题介绍用于 ASP.NET 的 Azure 会话状态提供程序的配置设置。 这些设置是在 web.config 文件中 sessionState 元素的 providers 节中指定的。

会话状态配置设置

属性 说明

) 所需的名称 (

sessionState 元素用来引用提供程序的提供程序的“友好”名称。

需要) 类型 (

该提供程序的 .NET Framework 类型的字符串。 有关所需的值,请参阅下面的说明。

cacheName (必需)

Azure 缓存的名称。 此属性必须设置为 “default”

dataCacheClientName (可选)

要从 dataCacheClients 配置节中使用的 dataCacheClient 节的名称。 仅当在 web.config 文件中指定了多个 dataCacheClient 节时,才需要此属性。 默认情况下,提供程序将使用名为 “default”dataCacheClient 节。

applicationName (可选)

提供程序在创建用于存储输出缓存数据的缓存密钥时使用的字符串值。 默认值为空字符串。 如果未设置此属性,提供程序将使用 HttpRuntime.AppDomainAppId 的值作为它在内部使用的缓存键的一部分。 与会话状态功能不同的是,你不需要在不同的 ASP.NET 应用程序之间共享输出缓存数据(例如,/contoso 和 /AdventureWorks 无法共享输出缓存数据), 而是需要确保同一应用程序的不同物理实例均具有访问相同输出缓存数据的权限。 可以通过下面两种方法完成此任务:

  • 如果未显式设置 applicationName 提供程序属性,则在构造缓存密钥时,提供程序在内部使用 HttpRuntime.AppDomainAppId 。 这意味着同一应用程序的每个物理实例(即每个托管 /contoso 应用程序的 Web 服务器)都需要安装在 IIS 中相同的元数据库路径下。 有关元数据库路径如何与SQL Server和进程外会话状态提供程序一起使用的说明,请参阅https://support.microsoft.com/kb/325056。 尽管会话状态是不同的功能,但存在相同的问题,即保持元数据库路径同步。这适用于在web.config文件中未设置 applicationName 属性时的输出缓存。

  • 一种更简单的方法适用于同一 ASP.NET 应用程序 (的每个实例,例如,在承载 /contoso 应用程序) 的每个 Web 服务器上,在web.config文件中使用相同的 applicationName 属性。 这样就允许同一应用程序的不同物理实例读取和写入相同的输出缓存数据。 在这种情况下,提供程序在构造缓存密钥时不使用 AppDomainAppId ,因此没有不匹配的元数据库路径的风险。

useBlobMode (可选)

布尔值,该值指定是否将会话状态数据作为单个序列化的 BLOB 进行加载和存储。 在本版本中,此属性必须设置为 true(默认值)。 不支持使用值 false

nonInlinedAdditionalLifetime (不支持的)

本版本不支持此属性。

retryInterval (可选)

当与缓存之间的通信发生错误时,每两次重试之间须等待的时间跨度。 此值所使用的字符串格式为 "HH:MM:SS"。 默认情况下,提供程序将睡眠 1 秒。

retryCount (可选)

一个整数值,告知提供程序在与缓存的通信失败时的重试次数。 请注意,并非所有操作都可以重试。 默认值为 3 次重试。 提供程序在每次重试尝试之间休眠配置的 retryInterval 时间。

inlinedKeys (不支持的)

本版本不支持此属性。

maxInlinedStringLength (不支持的)

本版本不支持此属性。

注意

类型属性应设置为 “Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider, Microsoft.Web.DistributedCache”

示例

<configuration>
  <configSections>
    <section name="dataCacheClients" 
          type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core"
          allowLocation="true" allowDefinition="Everywhere" />
    <section name="cacheDiagnostics"
          type="Microsoft.ApplicationServer.Caching.AzureCommon.DiagnosticsConfigurationSection, Microsoft.ApplicationServer.Caching.AzureCommon"
          allowLocation="true" allowDefinition="Everywhere" />
  </configSections>
  <system.web>
    <!-- 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>
  </system.web>
  <dataCacheClients>
    <dataCacheClient name="default">
      <autoDiscover isEnabled="true" identifier="CacheWorkerRole1" />
    </dataCacheClient>
  </dataCacheClients>
  <cacheDiagnostics>
    <crashDump dumpLevel="Off" dumpStorageQuotaInMB="100" />
  </cacheDiagnostics>
</configuration>

另请参阅

概念

Azure 角色中缓存的会话状态提供程序