Provider av ASP.NET-sessionstillstånd för Azure Cache for Redis
Azure Cache for Redis 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 cachelagringssessionens tillståndsprovider konfigurerar du först cacheminnet och konfigurerar sedan ditt ASP.NET-program för cache med hjälp Azure Cache for Redis NuGet-paketet sessionstillstånd. Om ASP.NET Core program läser du Sessions- och tillståndshantering i ASP.NET Core.
Det är ofta inte praktiskt i en verklig 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 behöver lagra tillstånd är den bästa lösningen att hålla mängden tillstånd liten och lagra den i cookies. Om det inte är möjligt är nästa bästa lösning att använda ASP.NET sessionstillstånd med en provider för distribuerad minnescache. Den sämsta lösningen ur prestanda- och skalbarhetssynpunkt är att använda en databasuppbackad sessionstillståndsprovider. Det här avsnittet innehåller vägledning om hur du ASP.NET providern för sessionstillstånd 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 Azure Cache for Redis NuGet-paketet Sessionstillstånd väljer du NuGet Package Manager, Package Manager Console på menyn Verktyg.
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, annars utlöstes ett undantag. Att flytta till 2.0.1 eller senare är en större ändring. Mer information finns i v2.0.0 Information om större ändringar. Vid tidpunkten för den här artikeluppdateringen är den aktuella versionen av det här paketet 2.2.3.
NuGet-paketet för Redis-sessionstillståndsprovidern är 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 web.config filen. Det här avsnittet innehåller den konfiguration som krävs för ASP.NET att 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å attribut och exempelinställningar för varje attribut.
Konfigurera attributen med värdena till vänster från cachen 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 din cacheslutpunkt.
- port – använd antingen din icke-TLS-/SSL-port eller TLS-/SSL-port, beroende på TLS-inställningarna.
- accessKey – använd antingen den primära eller sekundära nyckeln för ditt cacheminne.
- ssl – sant om du vill skydda cache-/klientkommunikation med TLS; annars falskt. Se till att ange rätt port.
- Porten som inte är TLS är inaktiverad som standard för nya cacheminnen. Ange true för den här inställningen om du vill använda TLS-porten. Mer information om hur du aktiverar icke-TLS-porten finns i avsnittet Åtkomstportar i avsnittet Konfigurera ett cacheminne.
- throwOnError – true om du vill att ett undantag ska utlöstas om 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 egenskapen Microsoft.Web.Redis.RedisSessionStateProvider.LastException. Standardvärdet är true.
- retryTimeoutIn Milliseconds – Åtgärder som misslyckas utförs igen under det här intervallet, angivna i millisekunder. Det första återförsöket görs efter 20 millisekunder och sedan görs återförsök varje sekund tills intervallet retryTimeoutIn Milliseconds går ut. Omedelbart efter det här intervallet utförs åtgärden igen en sista gång. Om åtgärden fortfarande misslyckas, utlöstes undantaget tillbaka till anroparen, beroende på inställningen throwOnError. Standardvärdet är 0, vilket innebär att inga återförsök.
- databaseId – Anger vilken databas som ska användas för cacheutdata. Om inget värde anges används standardvärdet 0.
- applicationName – Nycklar lagras i redis som
{<Application Name>_<Session ID>}_Data. Det här namngivningsschemat gör att flera program kan dela samma Redis-instans. Den här parametern är valfri och om du inte anger den används ett standardvärde. - connectionTimeoutIn Milliseconds – Med den här inställningen kan du åsidosätta connectTimeout-inställningen i StackExchange.Redis-klienten. Om inget anges används standardinställningen connectTimeout på 5 000. Mer information finns i StackExchange.Redis-konfigurationsmodellen.
- operationTimeoutIn Milliseconds – Med den här inställningen kan du åsidosätta syncTimeout-inställningen i StackExchange.Redis-klienten. Om inget anges används standardinställningen syncTimeout på 1 000. Mer information finns i StackExchange.Redis-konfigurationsmodellen.
- redisSerializerType – Med den här inställningen kan du ange anpassad serialisering av sessionsinnehåll som skickas till Redis. Den angivna typen måste implementeras
Microsoft.Web.Redis.ISerializeroch måste deklarera offentliga parameterlösa konstruktorer. AnvändsSystem.Runtime.Serialization.Formatters.Binary.BinaryFormattersom standard.
Mer information om dessa egenskaper finns i det ursprungliga blogginlägget på Announcing ASP.NET Session State Provider for Redis.
Glöm inte att kommentera ut standardavsnittet för Sessionstillståndsprovider för InProc i 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 konfigureras programmet för att använda Azure Cache for Redis sessionstillståndsprovidern. 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 standardminnet ASP.NET sessionstillståndsprovidern. När sessionstillståndsprovidern för Redis används ska du se till att de datatyper som lagras i sessionstillstånd kan serialiseras.
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 att den är enkel och snabb. Du kan dock inte skala Web Apps 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 för session har en prestandapåverkan på din webbapp. Du kan också använda den här providern med en minnes in memory OLTP-konfiguration för att förbättra prestandan.
- Distribuerad i minnessessionstillståndsprovider som Azure Cache for Redis sessionstillståndsprovider – den här providern ger dig det bästa av båda världar. Webbappen 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 med en distribuerad minnescache, till exempel tillfälliga nätverksfel. Metodtips för att använda Cache finns i Cachelagring vägledning från Microsoft Patterns & Practices Azure Cloud Application Design and Implementation Guidance.
Mer information om sessionstillstånd och andra metodtips finns i Metodtips för webbutveckling (skapa Real-World Cloud Apps med Azure).
Sessionstillståndsproviders från tredje part
Nästa steg
Ta en ASP.NET cacheprovidern för utdata för Azure Cache for Redis.