Leverantör av ASP.NET-sessionstillstånd för Azure Cache for Redis

Azure Cache for Redis tillhandahåller en sessionstillståndsprovider som du kan använda för att lagra sessionstillståndet i minnet med Azure Cache for Redis i stället för en SQL Server-databas. Om du vill använda sessionstillståndsprovidern för cachelagring konfigurerar du först cacheminnet och konfigurerar sedan ditt ASP.NET program för cacheminne med hjälp av Azure Cache for Redis Session State NuGet-paketet. För ASP.NET Core-program läser du Sessions- och tillståndshantering i ASP.NET Core.

Det är ofta inte praktiskt i en molnapp att undvika att lagra någon form av tillstånd för en användarsession, men vissa metoder påverkar prestanda och skalbarhet mer än andra. Om du måste lagra tillstånd är den bästa lösningen att hålla mängden tillstånd litet och lagra det i cookies. Om det inte är möjligt är den näst bästa lösningen att använda ASP.NET sessionstillstånd med en provider för distribuerad minnesintern cache. Den sämsta lösningen ur prestanda- och skalbarhetssynpunkt är att använda en databasbaserad sessionstillståndsprovider. Den här artikeln innehåller vägledning om hur du använder ASP.NET Sessionstillståndsprovider för Azure Cache for Redis. Information om andra alternativ för sessionstillstånd finns i ASP.NET alternativ för sessionstillstånd.

Lagra ASP.NET-sessionstillstånd i cachen

Om du vill konfigurera ett klientprogram i Visual Studio med hjälp av NuGet-paketet för Sessionstillstånd för Azure Cache for Redis väljer du NuGet Package Manager, Package Manager Console på verktygsmenyn.

Kör följande kommando från fönstret Package Manager Console.

Install-Package Microsoft.Web.RedisSessionStateProvider

Viktigt!

Om du använder klustringsfunktionen från premiumnivån måste du använda RedisSessionStateProvider 2.0.1 eller senare eller så utlöses ett undantag. Att flytta till 2.0.1 eller senare är en icke-bakåtkompatibel ändring.

NuGet-paketet för Redis-sessionstillståndsprovidern har ett beroende av StackExchange.Redis-paketet. Om StackExchange.Redis-paketet inte finns i projektet installeras det.

NuGet-paketet laddar ned och lägger till nödvändiga sammansättningsreferenser och lägger till följande avsnitt i filen web.config. Det här avsnittet innehåller den konfiguration som krävs för att ditt ASP.NET program ska kunna använda Azure Cache for Redis-sessionstillståndsprovidern.

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

Det kommenterade avsnittet innehåller ett exempel på attributen och exempelinställningarna för varje attribut.

Konfigurera attributen med värdena till vänster från cacheminnet i Microsoft Azure-portalen och konfigurera de andra värdena efter behov. Anvisningar om hur du kommer åt dina cacheegenskaper finns i Konfigurera Azure Cache for Redis-inställningar.

  • host – ange cacheslutpunkten.
  • port – använd antingen din icke-TLS/SSL-port eller din TLS/SSL-port, beroende på TLS-inställningarna.
  • accessKey – använd antingen den primära eller sekundära nyckeln för cacheminnet.
  • ssl – sant om du vill skydda cache-/klientkommunikation med TLS, annars falskt. Se till att ange rätt port.
  • throwOnError – sant om du vill att ett undantag ska utlösas när det uppstår ett fel eller falskt om du vill att åtgärden ska misslyckas tyst. Du kan söka efter ett fel genom att kontrollera den statiska Microsoft.Web.Redis.RedisSessionStateProvider.LastException egenskapen. Standardvärdet är sant.
  • retryTimeoutInMilliseconds – åtgärder som misslyckas görs på nytt under det här intervallet, som anges i millisekunder. Det första återförsöket görs efter 20 millisekunder och sedan görs återförsök varje sekund tills s-intervallet retryTimeoutInMillisecondupphör att gälla. Omedelbart efter det här intervallet görs åtgärden igen en sista gång. Om åtgärden fortfarande misslyckas skickas undantaget tillbaka till anroparen, beroende på inställningen throwOnError . Standardvärdet är 0, vilket innebär att inga återförsök görs.
  • databaseId – Anger vilken databas som ska användas för cacheutdata. Om det inte anges används standardvärdet 0.
  • applicationName – Nycklar lagras i redis som {<Application Name>_<Session ID>}_Data. Med det här namngivningsschemat kan flera program dela samma Redis-instans. Den här parametern är valfri och om du inte anger den används ett standardvärde.
  • connectionTimeoutInMilliseconds – Med den connectTimeout här inställningen kan du åsidosätta inställningen i StackExchange.Redis-klienten. Om det inte anges används standardinställningen connectTimeout på 5000. Mer information finns i Konfigurationsmodellen StackExchange.Redis.
  • operationTimeoutInMilliseconds – Med den här inställningen kan du åsidosätta inställningen syncTimeout i StackExchange.Redis-klienten. Om det inte anges används standardinställningen syncTimeout 1000. Mer information finns i Konfigurationsmodellen StackExchange.Redis.
  • redisSerializerType – Med den här inställningen kan du ange anpassad serialisering av sessionsinnehåll som skickas till Redis. Den angivna typen måste implementera Microsoft.Web.Redis.ISerializer och måste deklarera en offentlig parameterlös konstruktor. Som standard System.Runtime.Serialization.Formatters.Binary.BinaryFormatter används.

Mer information om dessa egenskaper finns i det ursprungliga blogginlägget på Meddelande om ASP.NET Sessionstillståndsprovider för Redis.

Glöm inte att kommentera ut avsnittet standardsessionstillståndsprovider InProc i din 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> -->

När de här stegen har utförts är ditt program konfigurerat för att använda Azure Cache for Redis Sessionstillståndsprovider. När du använder sessionstillstånd i ditt program lagras det i en Azure Cache for Redis-instans.

Viktigt!

Data som lagras i cacheminnet måste vara serialiserbara, till skillnad från de data som kan lagras i standardprovidern för minnesintern ASP.NET sessionstillstånd. När sessionstillståndsprovidern för Redis används kontrollerar du att de datatyper som lagras i sessionstillståndet är serialiserbara.

ASP.NET alternativ för sessionstillstånd

  • I Minnessessionstillståndsprovider – Den här providern lagrar sessionstillståndet i minnet. Fördelen med att använda den här providern är enkelhet och hastighet. Du kan dock inte skala dina Webbappar om du använder i minnesprovidern eftersom den inte är distribuerad.
  • Sql Server-sessionstillståndsprovider – Den här providern lagrar sessionstillståndet i Sql Server. Använd den här providern om du vill lagra sessionstillståndet i beständig lagring. Du kan skala din webbapp, men användning av Sql Server for Session har en prestandaeffekt på webbappen. Du kan också använda den här providern med en MINNESintern OLTP-konfiguration för att förbättra prestandan.
  • Distribuerad i minnessessionstillståndsprovider, till exempel Azure Cache for Redis Sessionstillståndsprovider – Den här providern ger dig det bästa av båda världarna. Din webbapp kan ha en enkel, snabb och skalbar sessionstillståndsprovider. Eftersom den här providern lagrar sessionstillståndet i en cache måste din app ta hänsyn till alla egenskaper som är associerade när du pratar med en distribuerad minnescache, till exempel tillfälliga nätverksfel. Metodtips för hur du använder Cache finns i Cachelagring vägledning från Microsoft Patterns &Practices Azure Cloud Application Design and Implementation Guidance (Design och implementeringsvägledning för Azure Cloud Application).

Mer information om sessionstillstånd och andra metodtips finns i Metodtips för webbutveckling (Skapa verkliga molnappar med Azure).

Leverantörer av sessionstillstånd från tredje part

Nästa steg

Kolla in ASP.NET Utdatacacheprovidern för Azure Cache for Redis.