Fornecedor de Estado da Sessão ASP.NET para a Cache do Azure para Redis

O Cache do Azure para Redis fornece um provedor de estado de sessão que você pode usar para armazenar o estado da sessão na memória com o Cache Redis do Azure em vez de um banco de dados do SQL Server. Para usar o provedor de estado de sessão de cache, primeiro configure seu cache e, em seguida, configure seu aplicativo ASP.NET para cache usando o pacote NuGet do Cache do Azure para Estado da Sessão Redis. Para aplicativos ASP.NET Core, leia Gerenciamento de sessão e estado no ASP.NET Core.

Muitas vezes não é prático em um aplicativo de nuvem evitar armazenar alguma forma de estado para uma sessão de usuário, mas algumas abordagens afetam o desempenho e a escalabilidade mais do que outras. Se você tiver que armazenar o estado, a melhor solução é manter a quantidade de estado pequena e armazená-lo em cookies. Se isso não for viável, a próxima melhor solução é usar ASP.NET estado da sessão com um provedor para cache distribuído na memória. A pior solução do ponto de vista do desempenho e da escalabilidade é usar um provedor de estado de sessão apoiado por banco de dados. Este artigo fornece orientação sobre como usar o Provedor de Estado da Sessão ASP.NET para o Cache do Azure para Redis. Para obter informações sobre outras opções de estado de sessão, consulte ASP.NET Opções de estado da sessão.

Armazenar o estado da sessão do ASP.NET na cache

Para configurar um aplicativo cliente no Visual Studio usando o pacote NuGet do Cache do Azure para Estado da Sessão Redis, selecione Gerenciador de Pacotes NuGet, Console do Gerenciador de Pacotes no menu Ferramentas.

Execute o seguinte comando a partir da janela Package Manager Console.

Install-Package Microsoft.Web.RedisSessionStateProvider

Importante

Se você estiver usando o recurso de clustering da camada premium, deverá usar RedisSessionStateProvider 2.0.1 ou superior ou uma exceção será lançada. Mudar para 2.0.1 ou superior é uma mudança de rutura.

O pacote NuGet do Provedor de Estado de Sessão Redis tem uma dependência do pacote StackExchange.Redis. Se o pacote StackExchange.Redis não estiver presente em seu projeto, ele será instalado.

O pacote NuGet baixa e adiciona as referências de assembly necessárias e adiciona a seção a seguir ao seu arquivo web.config. Esta seção contém a configuração necessária para que seu aplicativo ASP.NET use o Cache do Azure para Provedor de Estado de Sessão 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>

A seção comentada fornece um exemplo dos atributos e configurações de exemplo para cada atributo.

Configure os atributos com os valores à esquerda do cache no portal do Microsoft Azure e configure os outros valores conforme desejado. Para obter instruções sobre como acessar suas propriedades de cache, consulte Configurar o Cache do Azure para configurações Redis.

  • host – especifique seu ponto de extremidade de cache.
  • port – use sua porta não-TLS/SSL ou sua porta TLS/SSL, dependendo das configurações TLS.
  • accessKey – use a chave primária ou secundária para seu cache.
  • ssl – true se você quiser proteger as comunicações de cache/cliente com TLS; caso contrário, false. Certifique-se de especificar a porta correta.
    • A porta não-TLS é desabilitada por padrão para novos caches. Especifique true para essa configuração para usar a porta TLS. Para obter mais informações sobre como habilitar a porta não-TLS, consulte a seção Portas de acesso no artigo Configurar um cache .
  • throwOnError – true se você quiser que uma exceção seja lançada quando houver uma falha, ou false se quiser que a operação falhe silenciosamente. Você pode verificar se há uma falha verificando a propriedade estática Microsoft.Web.Redis.RedisSessionStateProvider.LastException . O padrão é true.
  • retryTimeoutInMilliseconds – As operações que falham são repetidas durante esse intervalo, especificado em milissegundos. A primeira tentativa ocorre após 20 milissegundos e, em seguida, as novas tentativas ocorrem a cada segundo até que o retryTimeoutInMillisecondintervalo s expire. Imediatamente após este intervalo, a operação é repetida uma última vez. Se a operação ainda falhar, a exceção será devolvida ao chamador, dependendo da throwOnError configuração. O valor padrão é 0, o que significa que não há tentativas.
  • databaseId – Especifica qual banco de dados usar para dados de saída de cache. Se não for especificado, o valor padrão de 0 será usado.
  • applicationName – As chaves são armazenadas em redis como {<Application Name>_<Session ID>}_Data. Esse esquema de nomenclatura permite que vários aplicativos compartilhem a mesma instância do Redis. Esse parâmetro é opcional e, se você não fornecê-lo, um valor padrão será usado.
  • connectionTimeoutInMilliseconds – Esta configuração permite que você substitua a connectTimeout configuração no cliente StackExchange.Redis. Se não for especificado, a configuração padrão connectTimeout de 5000 será usada. Para obter mais informações, consulte Modelo de configuração StackExchange.Redis.
  • operationTimeoutInMilliseconds – Esta configuração permite que você substitua a configuração syncTimeout no cliente StackExchange.Redis. Se não for especificado, a configuração padrão syncTimeout de 1000 será usada. Para obter mais informações, consulte Modelo de configuração StackExchange.Redis.
  • redisSerializerType - Esta configuração permite especificar a serialização personalizada do conteúdo da sessão que é enviado para Redis. O tipo especificado deve implementar Microsoft.Web.Redis.ISerializer e deve declarar o construtor sem parâmetros público. Por padrão System.Runtime.Serialization.Formatters.Binary.BinaryFormatter é usado.

Para obter mais informações sobre essas propriedades, consulte o anúncio de postagem de blog original em Anunciando ASP.NET provedor de estado de sessão para Redis.

Não se esqueça de comentar a seção do provedor de estado de sessão padrão InProc em seu web.config.

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

Depois que essas etapas forem executadas, seu aplicativo será configurado para usar o Cache do Azure para o Provedor de Estado da Sessão Redis. Quando você usa o estado da sessão em seu aplicativo, ele é armazenado em uma instância do Cache do Azure para Redis.

Importante

Os dados armazenados no cache devem ser serializáveis, ao contrário dos dados que podem ser armazenados no padrão na memória ASP.NET Provedor de Estado da Sessão. Quando o Provedor de Estado de Sessão para Redis for usado, certifique-se de que os tipos de dados que estão sendo armazenados no estado da sessão sejam serializáveis.

ASP.NET Opções de Estado da Sessão

  • In Memory Session State Provider - Este provedor armazena o estado da sessão na memória. O benefício de usar este provedor é a simplicidade e velocidade. No entanto, você não pode dimensionar seus aplicativos Web se estiver usando no provedor de memória, pois ele não é distribuído.
  • Provedor de Estado da Sessão do SQL Server - Este provedor armazena o Estado da Sessão no Sql Server. Use este provedor se quiser armazenar o estado da sessão no armazenamento persistente. Você pode dimensionar seu Aplicativo Web, mas usar o Sql Server for Session tem um efeito de desempenho em seu Aplicativo Web. Você também pode usar esse provedor com uma configuração OLTP na memória para ajudar a melhorar o desempenho.
  • Provedor de Estado de Sessão Distribuído na Memória, como o Provedor de Estado de Sessão do Azure para Cache Redis - Este provedor oferece o melhor dos dois mundos. Seu aplicativo Web pode ter um provedor de estado de sessão simples, rápido e escalável. Como esse provedor armazena o estado da sessão em um cache, seu aplicativo deve levar em consideração todas as características associadas ao falar com um cache de memória distribuído, como falhas de rede transitórias. Para obter as práticas recomendadas sobre o uso do Cache, consulte Diretrizes de cache do Microsoft Patterns & Practices Azure Cloud Application Design and Implementation Guidance.

Para obter mais informações sobre o estado da sessão e outras práticas recomendadas, consulte Práticas recomendadas de desenvolvimento da Web (Criando aplicativos de nuvem do mundo real com o Azure).

Provedores de estado de sessão de terceiros

Próximos passos

Confira o ASP.NET Provedor de Cache de Saída para o Cache do Azure para Redis.