Zprostředkovatel stavu relací ASP.NET pro Azure Cache for Redis
Azure Cache for Redis poskytuje zprostředkovatele stavu relace, který můžete použít k uložení stavu relace v paměti pomocí Azure Cache for Redis místo SQL Server databáze. Pokud chcete použít zprostředkovatele stavu relace ukládání do mezipaměti, nejprve nakonfigurujte mezipaměť ASP.NET pak nakonfigurujte pro mezipaměť pomocí balíčku Azure Cache for Redis Stav relace NuGet. Další ASP.NET Core si přečtěte v části Správa relací a stavů v ASP.NET Core.
V reálné cloudové aplikaci často není praktické se vyhnout ukládání určité formy stavu pro uživatelskou relaci, ale některé přístupy mají vliv na výkon a škálovatelnost více než jiné. Pokud potřebujete uložit stav, je nejlepší 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 stav ASP.NET 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 relací zálohované databáze. Toto téma obsahuje pokyny k používání poskytovatele ASP.NET stavu relace 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 Visual Studio pomocí balíčku Azure Cache for Redis Session State NuGet, v nabídce Nástroje vyberte NuGet Správce balíčků, Správce balíčků Console.
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ána výjimka. Přechodem na 2.0.1 nebo vyšší je změna, která má narušování. Další informace najdete v podrobnostech o rozbíjení změn v2.0.0. V době aktualizace tohoto článku je aktuální verze tohoto balíčku 2.2.3.
Balíček redis Session State Provider NuGet má závislost na balíčku StackExchange.Redis. Pokud v projektu není balíček StackExchange.Redis, 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, ASP.NET aplikace používá poskytovatele Azure Cache for Redis stavu relace.
<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 okomentované části je příklad atributů a ukázkového nastavení pro každý atribut.
Nakonfigurujte atributy s hodnotami nalevo od mezipaměti na portálu Microsoft Azure a nakonfigurujte ostatní hodnoty podle potřeby. Pokyny pro přístup k vlastnostem mezipaměti najdete v tématu Konfigurace Azure Cache for Redis mezipaměti.
- host – zadejte koncový bod mezipaměti.
- port – v závislosti na nastavení protokolu TLS použijte buď váš port bez TLS/SSL, nebo port TLS/SSL.
- accessKey – pro mezipaměť použijte primární nebo sekundární klíč.
- ssl – hodnota true, pokud chcete zabezpečit komunikaci mezipaměti nebo klienta s protokolem TLS; v opačném případě false. Nezapomeňte zadat správný port.
- Port bez TLS je ve výchozím nastavení pro nové mezipaměti zakázán. Pro toto nastavení použijte port TLS zadejte true. Další informace o povolení portu bez protokolu TLS najdete v části Přístupové porty v tématu Konfigurace mezipaměti.
- throwOnError – true, pokud chcete vyvolat výjimku, pokud dojde k selhání, nebo false, pokud chcete, aby operace v tichém režimu selhala. Selhání můžete zkontrolovat kontrolou statické vlastnosti Microsoft.Web.Redis.RedisSessionStateProvider.LastException. Výchozí hodnota je true.
- retryTimeoutInMilliseconds – neúspěšné operace se v tomto intervalu zopakují zadané v milisekundách. K prvnímu opakování dojde po 20 milisekundách a pak k opakování dojde každou sekundu, dokud nevyprší interval retryTimeoutInMilliseconds. Okamžitě po tomto intervalu se operace jednou znovu zopakuje. Pokud operace stále selže, vyvolá se výjimka zpět volajícímu v závislosti na nastavení throwOnError. Výchozí hodnota je 0, což znamená, že se žádné opakování nebude ovat.
- databaseId – určuje, která databáze se má použít pro výstupní data mezipaměti. Pokud není zadaný, použije se výchozí hodnota 0.
- applicationName – klíče se ukládají 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 volitelný a pokud ho nezadáte, použije se výchozí hodnota. - connectionTimeoutInMilliseconds – Toto nastavení umožňuje přepsat nastavení connectTimeout v klientovi StackExchange.Redis. Pokud není zadané, použije se výchozí nastavení connectTimeout 5000. Další informace najdete v tématu Konfigurační model StackExchange.Redis.
- operationTimeoutInMilliseconds – Toto nastavení umožňuje přepsat nastavení syncTimeout v klientovi StackExchange.Redis. Pokud není zadané, použije se výchozí nastavení syncTimeout 1000. Další informace najdete v tématu Konfigurační model StackExchange.Redis.
- redisSerializerType – Toto nastavení umožňuje určit vlastní serializaci obsahu relace, který se odesílá do Redis. Zadaný typ musí implementovat a
Microsoft.Web.Redis.ISerializermusí deklarovat veřejný konstruktor bez parametrů. Ve výchozímSystem.Runtime.Serialization.Formatters.Binary.BinaryFormatternastavení se používá .
Další informace o těchto vlastnostech najdete v původním blogovém příspěvku na ASP.NET zprostředkovateli stavu relace pro Redis.
Nezapomeňte okomentovat standardní část Zprostředkovatel stavu relace InProc ve vašem 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> -->
Po provedení těchto kroků je vaše aplikace nakonfigurovaná tak, aby Azure Cache for Redis stavu relace. Když ve své aplikaci použijete stav relace, uloží se do Azure Cache for Redis instance.
Důležité
Data uložená v mezipaměti musí být serializovatelná, na rozdíl od dat, která lze uložit ve výchozím nastavení v paměti ASP.NET zprostředkovateli stavu relace. 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é.
ASP.NET Možnosti stavu relace
- V části Zprostředkovatel stavu relace paměti – Tento zprostředkovatel ukládá stav relace do paměti. Výhodou použití tohoto poskytovatele je, že je jednoduchý a rychlý. Pokud však používáte poskytovatele paměti, Web Apps škálovat, protože není distribuovaný.
- Zprostředkovatel stavu relace systému SQL Server – Tento zprostředkovatel ukládá stav relace v systému SQL Server. Tohoto poskytovatele 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. Tohoto poskytovatele můžete také použít s konfigurací OLTP v paměti, která vám pomůže zvýšit výkon.
- Distributed In Memory Session State Provider, například Azure Cache for Redis Session State Provider – tento zprostředkovatel poskytuje to nejlepší z obou světů. Vaše webová aplikace může mít jednoduchého, rychlého a škálovatelného zprostředkovatele 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 charakteristiky spojené při rozhovoru s distribuovanou mezipamětí v paměti, jako jsou přechodná selhání sítě. Osvědčené postupy pro používání mezipaměti najdete v Ukládání do mezipaměti v tématu Microsoft Patterns & Practices Azure Cloud Application Design and Implementation Guidance.
Další informace o stavu relace a dalších osvědčených postupech najdete v tématu Osvědčené postupy pro vývoj webu (Real-World cloudovýchaplikací pomocí Azure).
Poskytovatelé stavu relací třetích stran
Další kroky
Podívejte se na zprostředkovatele ASP.NET výstupní mezipaměti pro Azure Cache for Redis.