Zprostředkovatel stavu relací ASP.NET pro Azure Cache for Redis

Azure Cache for Redis poskytuje poskytovatele stavu relace, který můžete použít k uložení stavu relace v paměti s Azure Cache for Redis místo databáze SQL Serveru. Pokud chcete použít zprostředkovatele stavu relace ukládání do mezipaměti, nejprve nakonfigurujte mezipaměť a pak nakonfigurujte aplikaci ASP.NET pro mezipaměť pomocí balíčku NuGet stavu relace Azure Cache for Redis. V případě aplikací ASP.NET Core si přečtěte správu relací a stavů v ASP.NET Core.

V cloudové aplikaci není často praktické se vyhnout ukládání určité formy stavu pro uživatelskou relaci, ale některé přístupy ovlivňují výkon a škálovatelnost více než jiné. Pokud potřebujete uložit stav, nejlepším řešením je zachovat malé množství stavu a uložit ho do souborů cookie. Pokud to není možné, dalším nejlepším řešením je použít ASP.NET stav relace s poskytovatelem pro distribuovanou mezipaměť v paměti. Nejhorším řešením z hlediska výkonu a škálovatelnosti je použití poskytovatele stavu relace založeného na databázi. Tento článek obsahuje pokyny k používání poskytovatele stavu relace ASP.NET pro Azure Cache for Redis. Informace o dalších možnostech stavu relace najdete v tématu ASP.NET Možnosti stavu relace.

Uložení stavu relace ASP.NET v mezipaměti

Pokud chcete nakonfigurovat klientskou aplikaci v sadě Visual Studio pomocí balíčku NuGet stavu relace Azure Cache for Redis, vyberte v nabídce Nástroje Správce balíčků NuGet Správce balíčků konzolu.

V okně Package Manager Console spusťte následující příkaz.

Install-Package Microsoft.Web.RedisSessionStateProvider

Důležité

Pokud používáte funkci clusteringu z úrovně Premium, musíte použít RedisSessionStateProvider 2.0.1 nebo vyšší nebo je vyvolán výjimka. Přechod na verzi 2.0.1 nebo vyšší je zásadní změnou.

Balíček NuGet zprostředkovatele stavu relace Redis má závislost na balíčku StackExchange.Redis. Pokud balíček StackExchange.Redis v projektu není, nainstaluje se.

Balíček NuGet stáhne a přidá požadované odkazy na sestavení a přidá do souboru web.config následující část. Tato část obsahuje požadovanou konfiguraci aplikace ASP.NET pro použití zprostředkovatele stavu relace Azure Cache for Redis.

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

V části s komentáři najdete příklad atributů a ukázkového nastavení pro každý atribut.

Nakonfigurujte atributy s hodnotami vlevo z vaší mezipaměti na webu Microsoft Azure Portal a podle potřeby nakonfigurujte další hodnoty. Pokyny k přístupu k vlastnostem mezipaměti najdete v tématu Konfigurace nastavení Azure Cache for Redis.

  • host – zadejte koncový bod mezipaměti.
  • port – v závislosti na nastavení protokolu TLS použijte port jiného typu než TLS/SSL nebo port TLS/SSL.
  • accessKey – pro mezipaměť použijte primární nebo sekundární klíč.
  • ssl – true, pokud chcete zabezpečit komunikaci mezi mezipamětí a klientem pomocí protokolu TLS, jinak nepravda. Nezapomeňte zadat správný port.
  • throwOnError – true, pokud chcete, aby byla vyvolán výjimka, pokud dojde k chybě, nebo false, pokud chcete, aby operace selhála bezobslužně. Chybu můžete zkontrolovat kontrolou statické Microsoft.Web.Redis.RedisSessionStateProvider.LastException vlastnosti. Výchozí hodnota je true.
  • retryTimeoutInMilliseconds – operace, které se v tomto intervalu opakují, zadané v milisekundách. K prvnímu opakování dojde po 20 milisekundách a pak k opakování dochází každou sekundu, dokud retryTimeoutInMillisecondnevyprší interval. Okamžitě po tomto intervalu se operace opakuje jednou v konečném čase. Pokud operace stále selže, v závislosti na throwOnError nastavení se výjimka vyvolá zpět volajícímu. Výchozí hodnota je 0, což znamená, že nedochází k opakovaným pokusům.
  • databaseId – Určuje, která databáze se má použít pro výstupní data mezipaměti. Pokud není zadáno, použije se výchozí hodnota 0.
  • applicationName – Klíče jsou uloženy v redis jako {<Application Name>_<Session ID>}_Data. Toto schéma pojmenování umožňuje více aplikacím sdílet stejnou instanci Redis. Tento parametr je nepovinný a pokud ho nezadáte, použije se výchozí hodnota.
  • connectionTimeoutInMilliseconds – Toto nastavení umožňuje přepsat connectTimeout nastavení v klientovi StackExchange.Redis. Pokud není zadáno, použije se výchozí nastavení connectTimeout 5000. Další informace naleznete v tématu StackExchange.Redis konfigurační model.
  • operationTimeoutInMilliseconds – Toto nastavení umožňuje přepsat nastavení syncTimeout v klientovi StackExchange.Redis. Pokud není zadáno, použije se výchozí syncTimeout nastavení 1000. Další informace naleznete v tématu StackExchange.Redis konfigurační model.
  • redisSerializerType – Toto nastavení umožňuje zadat vlastní serializaci obsahu relace, který je odeslán do Redis. Zadaný typ musí implementovat Microsoft.Web.Redis.ISerializer a musí deklarovat veřejný konstruktor bez parametrů. Ve výchozím nastavení System.Runtime.Serialization.Formatters.Binary.BinaryFormatter se používá.

Další informace o těchto vlastnostech naleznete v původním blogovém příspěvku na Oznámení o ASP.NET Session State Provider for Redis.

Nezapomeňte v souboru web.config okomentovat InProc standardní část zprostředkovatele stavu relace.

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

Po provedení těchto kroků je vaše aplikace nakonfigurovaná tak, aby používala zprostředkovatele stavu relace Azure Cache for Redis. Když ve své aplikaci použijete stav relace, uloží se v instanci Azure Cache for Redis.

Důležité

Data uložená v mezipaměti musí být serializovatelná, na rozdíl od dat, která mohou být uložena ve výchozím poskytovateli stavu relace ASP.NET paměti. Při použití zprostředkovatele stavu relace pro Redis se ujistěte, že datové typy, které jsou uloženy ve stavu relace, jsou serializovatelné.

Možnosti stavu relace ASP.NET

  • Ve zprostředkovateli stavu relace paměti – Tento zprostředkovatel ukládá stav relace do paměti. Výhodou použití tohoto poskytovatele je jednoduchost a rychlost. Web Apps ale nemůžete škálovat, pokud používáte poskytovatele paměti, protože není distribuovaný.
  • Zprostředkovatel stavu relace SQL Serveru – Tento zprostředkovatel ukládá stav relace na SQL Serveru. Tento zprostředkovatel použijte, pokud chcete uložit stav relace do trvalého úložiště. Webovou aplikaci můžete škálovat, ale použití Sql Serveru pro relaci má vliv na výkon vaší webové aplikace. Tento zprostředkovatel můžete také použít s konfigurací OLTP v paměti, aby se zlepšil výkon.
  • Distribuovaný ve zprostředkovateli stavu relace paměti, jako je Azure Cache for Redis Session State Provider – Tento poskytovatel poskytuje to nejlepší z obou světů. Vaše webová aplikace může mít jednoduchého, rychlého a škálovatelného poskytovatele stavu relace. Vzhledem k tomu, že tento poskytovatel ukládá stav relace do mezipaměti, musí vaše aplikace vzít v úvahu všechny vlastnosti přidružené při komunikaci s distribuovanou mezipamětí paměti, jako jsou přechodná selhání sítě. Osvědčené postupy při používání mezipaměti najdete v Ukládání do mezipaměti pokyny k návrhu a implementaci cloudových aplikací Azure Microsoft Patterns &Practices.

Další informace o stavu relace a dalších osvědčených postupech najdete v tématu Osvědčené postupy vývoje webu (vytváření reálných cloudových aplikací pomocí Azure).

Poskytovatelé stavu relací třetích stran

Další kroky

Podívejte se na poskytovatele výstupní mezipaměti ASP.NET pro Azure Cache for Redis.