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.
  • 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 retryTimeoutInMilliseconds 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 a throwOnError 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 szerint System.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.