Az Azure Cache for Redis ASP.NET munkamenet-állapotszolgáltatója
Az Azure Cache for Redis egy munkamenet-állapotszolgáltatót biztosít, amellyel a munkamenet-állapotot a memóriában tárolhatja az Azure Cache for Redisben SQL Server-adatbázis helyett. A gyorsítótárazási munkamenet állapotszolgáltatójának használatához először konfigurálja a gyorsítótárat, majd konfigurálja a ASP.NET alkalmazást a gyorsítótárhoz az Azure Cache for Redis Session State NuGet-csomag használatával. Az ASP.NET Core-alkalmazások esetében olvassa el a munkamenet- és állapotkezelést a ASP.NET Core-ban.
A felhőalkalmazásokban gyakran nem praktikus, hogy ne tároljon valamilyen állapotot egy felhasználói munkamenethez, de egyes megközelítések jobban befolyásolják a teljesítményt és a méretezhetőséget, mint mások. Ha állapotot kell tárolnia, a legjobb megoldás az, ha az állapotot kicsiben tartja, és cookie-kban tárolja. Ha ez nem lehetséges, a következő legjobb megoldás, ha ASP.NET munkamenet-állapotot használ egy szolgáltatóval elosztott, memóriabeli gyorsítótárhoz. Teljesítmény és méretezhetőség szempontjából a legrosszabb megoldás egy adatbázis által támogatott munkamenet-állapotszolgáltató használata. Ez a cikk útmutatást nyújt az Azure Cache for Redis ASP.NET munkamenet-állapotszolgáltatójának használatához. Az egyéb munkamenetállapot-beállításokról további információt ASP.NET Munkamenetállapot beállításai című témakörben talál.
Store ASP.NET session state in the cache (ASP.NET munkamenet-állapot tárolása a gyorsítótárban)
Ha ügyfélalkalmazást szeretne konfigurálni a Visual Studióban az Azure Cache for Redis Session State NuGet csomaggal, válassza a NuGet Csomagkezelő, Csomagkezelő Konzol lehetőséget az Eszközök menüből.
Futtassa az alábbi parancsot a Package Manager Console
ablakából.
Install-Package Microsoft.Web.RedisSessionStateProvider
Fontos
Ha a prémium szintű fürtszolgáltatást használja, a RedisSessionStateProvider 2.0.1 vagy újabb verziót kell használnia, vagy kivételt jelent. A 2.0.1 vagy újabb verzióra váltás kompatibilitástörő változás.
A Redis Session State Provider NuGet-csomag függősége a StackExchange.Redis csomaghoz tartozik. Ha a StackExchange.Redis csomag nem található a projektben, akkor telepítve van.
A NuGet-csomag letölti és hozzáadja a szükséges szerelvényhivatkozásokat, és hozzáadja a következő szakaszt a web.config fájlhoz. Ez a szakasz az Azure Cache for Redis munkamenetállapot-szolgáltató használatához szükséges konfigurációt tartalmazza a ASP.NET alkalmazáshoz.
<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 megjegyzésben szereplő szakasz az egyes attribútumok attribútumait és mintabeállításait szemlélteti.
Konfigurálja az attribútumokat a gyorsítótár bal oldalán lévő értékekkel a Microsoft Azure Portalon, és konfigurálja a többi értéket igény szerint. A gyorsítótár tulajdonságainak elérésére vonatkozó utasításokért tekintse meg az Azure Cache for Redis beállításainak konfigurálását.
- gazdagép – adja meg a gyorsítótárvégpontot.
- port – a TLS beállításaitól függően használhatja a nem TLS-/SSL-portot vagy a TLS/SSL-portot.
- accessKey – használja a gyorsítótár elsődleges vagy másodlagos kulcsát.
- ssl – igaz, ha biztonságossá szeretné tenni a gyorsítótár-/ügyfélkommunikációt a TLS-lel; egyébként hamis. Ügyeljen arra, hogy a megfelelő portot adja meg.
- A nem TLS-port alapértelmezés szerint le van tiltva az új gyorsítótárak esetében. A TLS-port használatához adja meg a true értéket. A nem TLS-port engedélyezésével kapcsolatos további információkért tekintse meg a Gyorsítótár konfigurálása című cikk Hozzáférési portok szakaszát.
- throwOnError – igaz, ha azt szeretné, hogy hiba esetén kivétel legyen, vagy hamis, ha azt szeretné, hogy a művelet csendesen meghiúsuljon. A hibát a statikus
Microsoft.Web.Redis.RedisSessionStateProvider.LastException
tulajdonság ellenőrzésével ellenőrizheti. Az alapértelmezett érték igaz. - retryTimeoutInMilliseconds – A sikertelen műveleteket ezredmásodpercben megadott időközönként újrapróbáljuk. Az első újrapróbálkozás 20 ezredmásodperc után következik be, majd az újrapróbálkozások másodpercenként történnek, amíg az
retryTimeoutInMillisecond
s intervallum lejár. Közvetlenül ezt az időközt követően a művelet újrapróbálkozott egy utolsó alkalommal. Ha a művelet továbbra is meghiúsul, a rendszer a beállítástól függően visszadobja a kivételt athrowOnError
hívónak. Az alapértelmezett érték 0, ami azt jelenti, hogy nincs újrapróbálkozás. - databaseId – Megadja, hogy melyik adatbázist használja a gyorsítótár kimeneti adataihoz. Ha nincs megadva, a rendszer a 0 alapértelmezett értékét használja.
- applicationName – A kulcsok a redis as
{<Application Name>_<Session ID>}_Data
. Ez az elnevezési séma lehetővé teszi, hogy több alkalmazás is ugyanazt a Redis-példányt használja. Ez a paraméter nem kötelező, és ha nem adja meg, a rendszer alapértelmezett értéket használ. - connectionTimeoutInMilliseconds – Ezzel a beállítással felülbírálhatja a
connectTimeout
StackExchange.Redis-ügyfél beállításait. Ha nincs megadva, a rendszer az alapértelmezett 5000 connectTimeout beállítást használja. További információ: StackExchange.Redis konfigurációs modell. - operationTimeoutInMilliseconds – Ezzel a beállítással felülbírálhatja a SyncTimeout beállítást a StackExchange.Redis-ügyfélben. Ha nincs megadva, a rendszer az alapértelmezett
syncTimeout
1000-et használja. További információ: StackExchange.Redis konfigurációs modell. - redisSerializerType – Ez a beállítás lehetővé teszi a Redisnek küldött munkamenet-tartalom egyéni szerializálását. A megadott típusnak implementálnia
Microsoft.Web.Redis.ISerializer
kell és deklarálnia kell a nyilvános paraméter nélküli konstruktort. Alapértelmezés szerintSystem.Runtime.Serialization.Formatters.Binary.BinaryFormatter
a rendszer használja.
Ezekről a tulajdonságokról további információt az eredeti blogbejegyzésben talál, amely ASP.NET Redis munkamenet-állapotszolgáltatóját jelenti be.
Ne felejtse el megjegyzést fűzni a web.config standard InProc
munkamenetállapot-szolgáltató szakaszához.
<!-- <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> -->
A lépések végrehajtása után az alkalmazás konfigurálva van az Azure Cache for Redis munkamenetállapot-szolgáltató használatára. Amikor munkamenet-állapotot használ az alkalmazásban, az egy Azure Cache for Redis-példányban lesz tárolva.
Fontos
A gyorsítótárban tárolt adatoknak szerializálhatónak kell lenniük, ellentétben az alapértelmezett memóriabeli ASP.NET munkamenetállapot-szolgáltatóban tárolható adatokkal. A Redis munkamenet-állapotszolgáltatójának használata esetén győződjön meg arról, hogy a munkamenet-állapotban tárolt adattípusok szerializálhatók.
ASP.NET munkamenet-állapot beállításai
- A memória munkamenetállapot-szolgáltatójában – Ez a szolgáltató tárolja a munkamenet állapotát a memóriában. Ennek a szolgáltatónak az előnye az egyszerűség és a sebesség. A webalkalmazásokat azonban nem skálázhatja, ha memóriaszolgáltatót használ, mivel az nincs terjesztve.
- Sql Server munkamenetállapot-szolgáltató – Ez a szolgáltató tárolja a munkamenet-állapotot az Sql Serverben. Ezt a szolgáltatót akkor használja, ha a munkamenet-állapotot állandó tárolóban szeretné tárolni. Skálázhatja a webalkalmazást, de az SQL Server for Session használata hatással van a webalkalmazásra. Ezt a szolgáltatót memóriabeli OLTP-konfigurációval is használhatja a teljesítmény javítása érdekében.
- Elosztott memória-munkamenet állapotszolgáltatója, például az Azure Cache for Redis munkamenetállapot-szolgáltató – Ez a szolgáltató mindkét világ legjobbját nyújtja. A webalkalmazás egyszerű, gyors és méretezhető munkamenet-állapotszolgáltatóval rendelkezhet. Mivel ez a szolgáltató gyorsítótárban tárolja a munkamenet-állapotot, az alkalmazásnak figyelembe kell vennie az elosztott memóriagyorsítótárral való beszélgetés során társított összes jellemzőt, például az átmeneti hálózati hibákat. A Gyorsítótár használatával kapcsolatos ajánlott eljárásokért tekintse meg a Microsoft Patterns & Practices Azure Cloud Application tervezési és implementálási útmutatójának gyorsítótárazási útmutatóját .
A munkamenet állapotával és egyéb ajánlott eljárásokkal kapcsolatos további információkért tekintse meg a webfejlesztési ajánlott eljárásokat (Valós felhőalkalmazások létrehozása az Azure-ral) című témakört.
Külső munkamenet-állapotszolgáltatók
További lépések
Tekintse meg az Azure Cache for Redishez készült ASP.NET kimeneti gyorsítótár-szolgáltatót.