配置 ASP.NET 会话状态提供程序(Windows Server AppFabric 缓存)

Windows Server AppFabric 为 ASP.NET Web 应用程序提供了自定义的会话状态提供程序。这使得 Web 应用程序可以分散缓存群集中的会话对象,从而提供可伸缩性。鉴于 AppFabric 缓存功能的性质,您放入会话中的对象必须可序列化。

本主题中的过程假设您已准备了 Web 应用程序的开发环境,并且设置了对 AppFabric 缓存程序集的引用等。有关详细信息,请参阅准备缓存客户端开发环境(Windows Server AppFabric 缓存)

为了使您的 ASP.NET Web 应用程序能够使用 AppFabric 会话状态提供程序,您必须将以下元素添加到您的应用程序的 web.config 文件中:

  • configSections:此元素必须是配置文件中的第一个元素,位于打开的 configuration 标记下面。AppFabric 缓存程序集需要此元素才能运行。

  • dataCacheClient:此元素是配置元素的子元素。它用于配置缓存客户端以及指定缓存主机。有关缓存客户端的详细信息,请参阅开发缓存客户端(Windows Server AppFabric 缓存)

  • sessionState:此元素是 system.web 元素的子元素。它指定 Web 应用程序应使用 AppFabric 来管理会话状态。cacheName 属性指定将使用的命名缓存。如果将会话数据存储在缓存区域中,请使用 regionName 属性来指定区域。

备注

存储在区域中的对象将不会在缓存主机之间负载平衡,但位于创建区域的缓存主机中。因此,它通常不是推荐的配置。仅当特殊要求查找单个主机上的所有会话对象时,才应该使用区域。

警告

建议您确保用于指定缓存主机名称的 web.config 文件的安全。

为 Web 应用程序配置 AppFabric 会话状态提供程序的步骤

  1. 将这些步骤之后示例中的 configSections 元素复制到 web.config 文件中。确保此元素是 configuration 标记内的第一个元素。

  2. 将这些步骤之后示例中的 dataCacheClient 元素复制到 web.config 文件中。应该将它添加到 configuration 元素内的 configSections 元素后面。

    1. 将主机元素的 namecachePort 属性配置为与环境中的缓存服务器相匹配。根据需要添加或删除主机元素。
  3. 将这些步骤之后示例中的 sessionState 元素复制到 web.config 文件中。它应该放置在 system.web 元素内。

  4. 确定 Web 应用程序的身份。在 Web 服务器上,可在 IIS Manager 中完成此操作。查看与 Web 应用程序关联的应用程序池的身份。使用 Grant-CacheAllowedClientAccount Windows Powershell 命令授予此用户访问缓存群集的权限。

    Tip技巧
    如果应用程序池作为内置计算机帐户(如“NT Authority\Network Service”)运行,则您应该授予该计算机访问缓存群集的权限。可以通过将 DOMAINNAME\MACHINENAME$ 指定为帐户来实现此操作。请注意,在计算机名称之后附加“$”以表示这是计算机帐户。

示例

本示例演示如何将 ASP.NET Web 应用程序配置为使用缓存客户端将会话数据存储到称为 NamedCache1 的分布式缓存中。本示例中的缓存客户端仅配置为与名为 CacheServer1 的一个缓存主机通信。

首先,将 configSections 元素添加到 web.config 文件中作为 configuration 元素中的第一个元素:

<!--configSections must be the FIRST element -->
<configSections>
   <!-- required to read the <dataCacheClient> element -->
   <section name="dataCacheClient"
         type="Microsoft.ApplicationServer.Caching.DataCacheClientSection,
            Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0, 
            Culture=neutral, PublicKeyToken=31bf3856ad364e35"
         allowLocation="true"
         allowDefinition="Everywhere"/>
</configSections>

其次,将 dataCacheClient 元素添加到 web.config 文件中的 configSections 元素后面。您在此处将缓存客户端配置为符合您的应用程序需求。有关详细信息,请参阅应用程序配置设置(Windows Server AppFabric 缓存)

<!-- cache client -->
<dataCacheClient> 
  <!-- cache host(s) -->
  <hosts>
    <host
       name="CacheServer1"
       cachePort="22233"/>
  </hosts>
</dataCacheClient>

添加 configSectionsdataCacheClient 元素之后,将 sessionState 元素添加到 web.config 文件的 system.web 元素内。您在此处指定 Web 应用程序将使用哪一个缓存来存储会话状态数据。

请注意,如果多个 Web 应用程序需要共享相同的会话状态,则它们应使用相同的 sharedId 属性值。否则,您不需要指定 sharedId 属性。

<sessionState mode="Custom" customProvider="AppFabricCacheSessionStoreProvider">
  <providers>
    <!-- specify the named cache for session data -->
    <add 
      name="AppFabricCacheSessionStoreProvider" 
      type="Microsoft.ApplicationServer.Caching.DataCacheSessionStoreProvider" 
      cacheName="NamedCache1"
      sharedId="SharedApp"/>
  </providers>
</sessionState>

操作完成后,Web 应用程序的最后一个 web.config 文件将类似于以下示例。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
  <!--configSections must be the FIRST element -->
  <configSections>
     <!-- required to read the <dataCacheClient> element -->
     <section name="dataCacheClient"
         type="Microsoft.ApplicationServer.Caching.DataCacheClientSection,
            Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0, 
            Culture=neutral, PublicKeyToken=31bf3856ad364e35"
         allowLocation="true"
         allowDefinition="Everywhere"/>
  </configSections>
  
  <!-- cache client -->
  <dataCacheClient>    
    <!-- cache host(s) -->
    <hosts>
      <host
         name="CacheServer1"
         cachePort="22233"/>
    </hosts>
  </dataCacheClient>

  <system.web>
    <sessionState mode="Custom" customProvider="AppFabricCacheSessionStoreProvider">
      <providers>
        <!-- specify the named cache for session data -->
        <add 
          name="AppFabricCacheSessionStoreProvider" 
          type="Microsoft.ApplicationServer.Caching.DataCacheSessionStoreProvider" 
          cacheName="NamedCache1"
          sharedId="SharedApp"/>
      </providers>
    </sessionState>
  </system.web>
</configuration>

另请参阅

概念

Windows Server AppFabric 缓存客户端 (XML) 入门
使用配置方法(Windows Server AppFabric 缓存)
Windows Server AppFabric 缓存概念
开发缓存客户端(Windows Server AppFabric 缓存)

  2011-12-05