ASP.NET-sessiestatusprovider voor Azure Cache voor Redis

Azure Cache voor Redis biedt een sessiestatusprovider die u kunt gebruiken om de sessiestatus in het geheugen op te slaan met Azure Cache voor Redis in plaats van een SQL Server-database. Als u de provider voor de cachesessiestatus wilt gebruiken, configureert u eerst uw cache en configureert u vervolgens uw ASP.NET-toepassing voor cache met behulp van het NuGet-pakket Azure Cache voor Redis Sessiestatus. Lees voor ASP.NET Core-toepassingen sessie- en statusbeheer in ASP.NET Core.

Het is vaak niet praktisch in een cloud-app om te voorkomen dat een bepaalde vorm van status voor een gebruikerssessie wordt opgeslagen, 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 op te slaan in cookies. Als dat niet haalbaar is, is de volgende beste oplossing om ASP.NET sessiestatus te gebruiken bij een provider voor gedistribueerde, in-memory cache. De slechtste oplossing vanuit het oogpunt van prestaties en schaalbaarheid is het gebruik van een provider voor sessiestatussen die door een database worden ondersteund. Dit artikel bevat richtlijnen voor het gebruik van de ASP.NET Sessiestatusprovider voor Azure Cache voor Redis. Zie ASP.NET Opties voor sessiestatus voor meer informatie over andere opties voor sessiestatus.

De ASP.NET-sessiestatus in de cache opslaan

Als u een clienttoepassing in Visual Studio wilt configureren met behulp van het NuGet-pakket Azure Cache voor Redis Sessiestatus, 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 of wordt een uitzondering gegenereerd. Overstappen op 2.0.1 of hoger is een belangrijke wijziging.

Het NuGet-pakket Redis Session State Provider heeft een afhankelijkheid van het StackExchange.Redis-pakket. Als het StackExchange.Redis-pakket 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 Sessiestatusprovider 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 vanuit uw cache in Microsoft Azure Portal en configureer de andere waarden naar wens. Zie Azure Cache voor Redis-instellingen configureren voor instructies over het openen van uw 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 : waar als u de communicatie tussen cache 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 waar op voor deze instelling om de TLS-poort te gebruiken. Zie de sectie Toegangspoorten in het artikel Een cache configureren voor meer informatie over het inschakelen van de niet-TLS-poort.
  • throwOnError : waar als u wilt dat er een uitzondering wordt gegenereerd wanneer er een fout optreedt, of onwaar als u wilt dat de bewerking op de achtergrond mislukt. U kunt controleren op een fout door de statische Microsoft.Web.Redis.RedisSessionStateProvider.LastException eigenschap te controleren. De standaardwaarde is waar.
  • retryTimeoutInMilliseconds: bewerkingen die mislukken, worden opnieuw geprobeerd tijdens dit interval, opgegeven in milliseconden. De eerste nieuwe poging treedt op na 20 milliseconden en voert vervolgens elke seconde nieuwe pogingen uit totdat het retryTimeoutInMillisecondinterval verloopt. Onmiddellijk na dit interval wordt de bewerking opnieuw uitgevoerd één laatste keer. Als de bewerking nog steeds mislukt, wordt de uitzondering teruggegooid naar de beller, afhankelijk van de throwOnError instelling. De standaardwaarde is 0, wat betekent dat er geen nieuwe pogingen worden gedaan.
  • databaseId : hiermee geeft u op 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 hetzelfde Redis-exemplaar delen. Deze parameter is optioneel en als u deze niet opgeeft, wordt er een standaardwaarde gebruikt.
  • connectionTimeoutInMilliseconds : met deze instelling kunt u de connectTimeout instelling in de StackExchange.Redis-client overschrijven. Als dit niet is opgegeven, wordt de standaardinstelling connectTimeout van 5000 gebruikt. Zie het configuratiemodel StackExchange.Redis voor meer informatie.
  • operationTimeoutInMilliseconds : met deze instelling kunt u de syncTimeout-instelling in de StackExchange.Redis-client overschrijven. Als dit niet is opgegeven, wordt de standaardinstelling syncTimeout van 1000 gebruikt. Zie het 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 constructor zonder parameters implementeren Microsoft.Web.Redis.ISerializer en declareren. System.Runtime.Serialization.Formatters.Binary.BinaryFormatter Standaard wordt gebruikt.

Zie de oorspronkelijke blogberichtaankondiging bij Announcing ASP.NET Session State Provider voor Redis voor meer informatie over deze eigenschappen.

Vergeet niet de sectie van de standaard InProc sessiestatusprovider in uw web.config commentaar te geven.

<!-- <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 de Azure Cache voor Redis Sessiestatusprovider. Wanneer u de sessiestatus in uw toepassing gebruikt, wordt deze opgeslagen in een Azure Cache voor Redis-exemplaar.

Belangrijk

Gegevens die in de cache zijn opgeslagen, moeten serialiseerbaar zijn, in tegenstelling tot de gegevens die kunnen worden opgeslagen in het standaardgeheugen ASP.NET Sessiestatusprovider. Wanneer de sessiestatusprovider voor Redis wordt gebruikt, moet u ervoor zorgen dat de gegevenstypen die in de sessiestatus worden opgeslagen, serialiseerbaar zijn.

Opties voor ASP.NET sessiestatus

  • In de provider van de geheugensessiestatus: deze provider slaat de sessiestatus op in het geheugen. Het voordeel van het gebruik van deze provider is eenvoud en snelheid. U kunt uw Web Apps echter niet schalen als u in de geheugenprovider werkt, omdat deze niet wordt gedistribueerd.
  • Sql Server Session State Provider: deze provider slaat de sessiestatus op in Sql Server. Gebruik deze provider als u de sessiestatus wilt opslaan in permanente opslag. U kunt uw web-app schalen, maar het gebruik van Sql Server voor sessie heeft een prestatie-effect op uw web-app. U kunt deze provider ook gebruiken met een OLTP-configuratie in het geheugen 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 sessiestatusprovider hebben. Omdat deze provider de sessiestatus in een cache opslaat, moet uw app rekening houden met alle kenmerken die zijn gekoppeld aan een gedistribueerde in geheugencache, zoals tijdelijke netwerkfouten. Zie Richtlijnen voor caching van Microsoft Patterns & Practices azure Cloud Application Design and Implementation Guidance (Richtlijnen voor het ontwerpen en implementeren van Azure-cloudtoepassingen) voor aanbevolen procedures voor het gebruik van cache.

Zie Aanbevolen procedures voor webontwikkeling (het bouwen van echte cloud-apps met Azure) voor meer informatie over sessiestatus en andere aanbevolen procedures.

Externe sessiestatusproviders

Volgende stappen

Bekijk de ASP.NET Uitvoercacheprovider voor Azure Cache voor Redis.