ASP.NET-sessiestatusprovider voor Azure Cache voor Redis

Azure Cache voor Redis biedt een sessietoestandprovider die u kunt gebruiken om uw sessietoestand in het geheugen op te slaan met Azure Cache voor Redis in plaats van een SQL Server database. Als u de sessietoestandprovider voor caching wilt gebruiken, configureert u eerst uw cache en configureert u vervolgens uw ASP.NET-toepassing voor cache met behulp van het Azure Cache voor Redis NuGet-pakket Sessietoestand. Lees ASP.NET Core en statusbeheer in ASP.NET Core voor meer ASP.NET Core.

Het is vaak niet praktisch in een echte cloud-app om te voorkomen dat een bepaalde vorm van status wordt opgeslagen voor een gebruikerssessie, maar sommige benaderingen beïnvloeden de prestaties en schaalbaarheid meer dan andere. Als u de status moet opslaan, is de beste oplossing om de hoeveelheid status klein te houden en deze op te slaan in cookies. Als dat niet haalbaar is, is de volgende beste oplossing het gebruik van ASP.NET sessietoestand met een provider voor gedistribueerde, in-memory cache. De slechtste oplossing op het gebied van prestaties en schaalbaarheid is het gebruik van een sessietoestandprovider met databaseback-overheid. Dit onderwerp bevat richtlijnen voor het gebruik van ASP.NET sessie state provider voor Azure Cache voor Redis. Zie Sessietoestandopties voor meer informatie ASP.NET sessietoestandopties.

De ASP.NET-sessiestatus in de cache opslaan

Als u een clienttoepassing in Visual Studio wilt configureren met behulp van het Azure Cache voor Redis Session State NuGet-pakket, selecteert u NuGet Pakketbeheer, Pakketbeheer Console in het menu Extra.

Voer de volgende opdracht uit vanuit het venster Package Manager Console.

Install-Package Microsoft.Web.RedisSessionStateProvider

Belangrijk

Als u de clusterfunctie van de Premium-laag gebruikt, moet u RedisSessionStateProvider 2.0.1 of hoger gebruiken, anders wordt er een uitzondering gemaakt. De overstap naar 2.0.1 of hoger is een wijziging die een grote wijziging is; Zie voor meer informatie v2.0.0 Breaking Change Details. Op het moment dat dit artikel wordt bijgewerkt, is de huidige versie van dit pakket 2.2.3.

Het NuGet-pakket van de Redis-sessietoestandprovider is afhankelijk van het StackExchange.Redis-pakket. Als het pakket StackExchange.Redis niet aanwezig is in uw project, wordt het geïnstalleerd.

Het NuGet-pakket downloadt en voegt de vereiste assemblyverwijzingen toe en voegt de volgende sectie toe aan uw web.config bestand. Deze sectie bevat de vereiste configuratie voor uw ASP.NET toepassing om de Azure Cache voor Redis sessietoestandprovider te gebruiken.

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

De sectie met opmerkingen bevat een voorbeeld van de kenmerken en voorbeeldinstellingen voor elk kenmerk.

Configureer de kenmerken met de waarden aan de linkerkant van uw cache in Microsoft Azure portal en configureer de andere waarden naar wens. Zie Configure Azure Cache voor Redis settings (Instellingen voor Azure Cache voor Redis cache configureren) voor instructies over het openen Azure Cache voor Redis cache-eigenschappen.

  • host : geef uw cache-eindpunt op.
  • poort: gebruik uw niet-TLS/SSL-poort of uw TLS/SSL-poort, afhankelijk van de TLS-instellingen.
  • accessKey: gebruik de primaire of secundaire sleutel voor uw cache.
  • ssl: true als u communicatie tussen caches en client wilt beveiligen met TLS; anders onwaar. Zorg ervoor dat u de juiste poort opgeeft.
    • De niet-TLS-poort is standaard uitgeschakeld voor nieuwe caches. Geef true op voor deze instelling om de TLS-poort te gebruiken. Zie de sectie Toegangspoorten in het onderwerp Een cache configureren voor meer informatie over het inschakelen van de niet-TLS-poort.
  • throwOnError: true als u wilt dat er een uitzondering wordt veroorzaakt als er een fout is of false als u wilt dat de bewerking op de stille afstand mislukt. U kunt controleren op een fout door de statische eigenschap Microsoft.Web.Redis.RedisSessionStateProvider.LastException te controleren. De standaardwaarde is true.
  • retryTimeoutIn Millisecondiseconds: bewerkingen die mislukken, worden tijdens dit interval opnieuw uitgevoerd, opgegeven in milliseconden. De eerste poging vindt plaats na 20 milliseconden en wordt vervolgens elke seconde opnieuw uitgevoerd totdat het interval retryTimeoutIn Millisecondiseconds verloopt. Onmiddellijk na dit interval wordt de bewerking een laatste keer opnieuw uitgevoerd. Als de bewerking nog steeds mislukt, wordt de uitzondering teruggeworpen aan de aanroeper, afhankelijk van de throwOnError-instelling. De standaardwaarde is 0, wat betekent dat er geen nieuwe proberen zijn.
  • databaseId: geeft aan welke database moet worden gebruikt voor uitvoergegevens in de cache. Als dit niet is opgegeven, wordt de standaardwaarde 0 gebruikt.
  • applicationName: sleutels worden opgeslagen in redis als {<Application Name>_<Session ID>}_Data . Met dit naamgevingsschema kunnen meerdere toepassingen dezelfde Redis-instantie delen. Deze parameter is optioneel en als u deze niet opgeeft, wordt er een standaardwaarde gebruikt.
  • connectionTimeoutIn Milliseconds: met deze instelling kunt u de instelling connectTimeout in de Client StackExchange.Redis overschrijven. Als dit niet is opgegeven, wordt de standaardinstelling connectTimeout 5000 gebruikt. Zie Configuratiemodel StackExchange.Redis voor meer informatie.
  • operationTimeoutIn Milliseconds: met deze instelling kunt u de instelling syncTimeout in de client StackExchange.Redis overschrijven. Als dit niet is opgegeven, wordt de standaardinstelling syncTimeout van 1000 gebruikt. Zie Configuratiemodel StackExchange.Redis voor meer informatie.
  • redisSerializerType: met deze instelling kunt u aangepaste serialisatie opgeven van sessie-inhoud die naar Redis wordt verzonden. Het opgegeven type moet een openbare Microsoft.Web.Redis.ISerializer parameterloze constructor implementeren en declareer deze. Standaard wordt System.Runtime.Serialization.Formatters.Binary.BinaryFormatter gebruikt.

Zie voor meer informatie over deze eigenschappen de oorspronkelijke blogberichtaankondiging op aankondiging van ASP.NET Sessie state provider voor Redis.

Vergeet niet om commentaar te maken van de standaard sectie InProc session state provider in uw 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> -->

Zodra deze stappen zijn uitgevoerd, is uw toepassing geconfigureerd voor het gebruik van Azure Cache voor Redis sessie state provider. Wanneer u de sessietoestand in uw toepassing gebruikt, wordt deze opgeslagen in een Azure Cache voor Redis exemplaar.

Belangrijk

Gegevens die zijn opgeslagen in de cache, moeten serializeerbaar zijn, in tegenstelling tot de gegevens die kunnen worden opgeslagen in de standaard in-memory ASP.NET Sessie state Provider. Wanneer de sessietoestandprovider voor Redis wordt gebruikt, moet u ervoor zorgen dat de gegevenstypen die worden opgeslagen in de sessietoestand serialiseerbaar zijn.

ASP.NET Opties voor sessietoestand

  • In Memory Session State Provider : deze provider slaat de sessietoestand op in het geheugen. Het voordeel van het gebruik van deze provider is dat deze eenvoudig en snel is. U kunt de schaal van uw Web Apps als u in de geheugenprovider gebruikt omdat deze niet is gedistribueerd.
  • Sql Server Session State Provider: deze provider slaat de sessietoestand op in SQL Server. Gebruik deze provider als u de sessietoestand wilt opslaan in permanente opslag. U kunt uw web-app schalen, maar het gebruik van SQL Server voor sessie heeft een invloed op de prestaties van uw web-app. U kunt deze provider ook gebruiken met een IN-Memory OLTP-configuratie om de prestaties te verbeteren.
  • Distributed In Memory Session State Provider, zoals Azure Cache voor Redis Session State Provider: deze provider biedt u het beste van beide werelden. Uw web-app kan een eenvoudige, snelle en schaalbare sessietoestandprovider hebben. Omdat deze provider de sessietoestand opgeslagen in een cache, moet uw app rekening houden met alle kenmerken die zijn gekoppeld bij het praten met een gedistribueerde geheugencache, zoals tijdelijke netwerkfouten. Zie voor best practices voor het gebruik van Cache Caching microsoft Patterns & Practices Azure Cloud Application Design and Implementation Guidance (Richtlijnen voor het ontwerpen en implementeren van Azure Cloud-toepassingen).

Zie Best practices voor webontwikkeling (bouwen Real-World Cloud Apps met Azure) voor meer informatie over de sessietoestand en andere best practices.

Sessiestaatproviders van derden

Volgende stappen

Bekijk de ASP.NET Output Cache Provider voor Azure Cache voor Redis.