Dostawca stanu sesji ASP.NET dla usługi Azure Cache for RedisASP.NET Session State Provider for Azure Cache for Redis

Pamięć podręczna systemu Azure dla usługi Redis zawiera dostawcę stanu sesji, którego można użyć do przechowywania stanu sesji w pamięci za pomocą usługi Azure cache dla Redis zamiast bazy danych SQL Server.Azure Cache for Redis provides a session state provider that you can use to store your session state in-memory with Azure Cache for Redis instead of a SQL Server database. Aby użyć dostawcy stanu sesji buforowania, najpierw Skonfiguruj pamięć podręczną, a następnie skonfiguruj aplikację ASP.NET dla pamięci podręcznej przy użyciu usługi Azure cache dla pakietu NuGet stanu sesji Redis.To use the caching session state provider, first configure your cache, and then configure your ASP.NET application for cache using the Azure Cache for Redis Session State NuGet package. W przypadku aplikacji ASP.NET Core, Odczytaj Zarządzanie sesjami i Stanami w ASP.NET Core.For ASP.NET Core applications, read Session and state management in ASP.NET Core.

Często nie jest to praktyczne w aplikacji w chmurze w rzeczywistości, aby uniknąć przechowywania niektórych form stanu dla sesji użytkownika, ale niektóre podejścia mają wpływ na wydajność i skalowalność więcej niż inne.It's often not practical in a real-world cloud app to avoid storing some form of state for a user session, but some approaches impact performance and scalability more than others. Jeśli musisz przechowywać stan, najlepszym rozwiązaniem jest zachowanie małego stanu i zapisanie go w plikach cookie.If you have to store state, the best solution is to keep the amount of state small and store it in cookies. Jeśli to nie jest możliwe, następnym najlepszym rozwiązaniem jest użycie ASP.NET stanu sesji z dostawcą dla rozproszonej pamięci podręcznej w pamięci.If that isn't feasible, the next best solution is to use ASP.NET session state with a provider for distributed, in-memory cache. Najgorszym rozwiązaniem z punktu widzenia wydajności i skalowalności jest użycie dostawcy stanu sesji bazy danych.The worst solution from a performance and scalability standpoint is to use a database backed session state provider. Ten temat zawiera wskazówki dotyczące używania dostawcy stanu sesji ASP.NET dla usługi Azure cache for Redis.This topic provides guidance on using the ASP.NET Session State Provider for Azure Cache for Redis. Aby uzyskać informacje o innych opcjach stanu sesji, zobacz ASP.NET Session State Options.For information on other session state options, see ASP.NET Session State options.

Przechowywanie stanu sesji programu ASP.NET w pamięci podręcznejStore ASP.NET session state in the cache

Aby skonfigurować aplikację kliencką w programie Visual Studio przy użyciu pakietu NuGet usługi Azure cache for Redis, kliknij pozycję Menedżer pakietów NuGet , konsola Menedżera pakietów z menu Narzędzia .To configure a client application in Visual Studio using the Azure Cache for Redis Session State NuGet package, click NuGet Package Manager , Package Manager Console from the Tools menu.

W oknie Package Manager Console uruchom następujące polecenie.Run the following command from the Package Manager Console window.

Install-Package Microsoft.Web.RedisSessionStateProvider

Ważne

Jeśli używasz funkcji klastrowania z warstwy Premium, musisz użyć pakietu redissessionstateprovider 2.0.1 lub nowszej lub wyjątek jest zgłaszany.If you are using the clustering feature from the premium tier, you must use RedisSessionStateProvider 2.0.1 or higher or an exception is thrown. Przechodzenie do wersji 2.0.1 lub wyższej jest istotną zmianą; Aby uzyskać więcej informacji, zobacz artykuł v 2.0.0 — szczegóły dotyczące zmiany.Moving to 2.0.1 or higher is a breaking change; for more information, see v2.0.0 Breaking Change Details. W momencie aktualizacji tego artykułu bieżąca wersja tego pakietu jest 2.2.3.At the time of this article update, the current version of this package is 2.2.3.

Pakiet NuGet dostawcy stanu sesji Redis ma zależność od pakietu StackExchange. Redis. StrongName.The Redis Session State Provider NuGet package has a dependency on the StackExchange.Redis.StrongName package. Jeśli pakiet StackExchange. Redis. StrongName nie występuje w projekcie, jest on zainstalowany.If the StackExchange.Redis.StrongName package is not present in your project, it is installed.

Uwaga

Oprócz silnej nazwy pakietu StackExchange. Redis. StrongName istnieje również StackExchange. Redis, która nie ma silnej nazwy.In addition to the strong-named StackExchange.Redis.StrongName package, there is also the StackExchange.Redis non-strong-named version. Jeśli projekt korzysta z niesilnej nazwy StackExchange. Redis, należy ją odinstalować. w przeciwnym razie w projekcie pojawiają się konflikty nazw.If your project is using the non-strong-named StackExchange.Redis version you must uninstall it, otherwise you get naming conflicts in your project. Aby uzyskać więcej informacji o tych pakietach, zobacz Konfigurowanie klientów pamięci podręcznej platformy .NET.For more information about these packages, see Configure .NET cache clients.

Pakiet NuGet pobiera i dodaje wymagane odwołania do zestawu i dodaje do pliku web.config następującą sekcję.The NuGet package downloads and adds the required assembly references and adds the following section into your web.config file. Ta sekcja zawiera konfigurację wymaganą przez aplikację ASP.NET do korzystania z pamięci podręcznej platformy Azure dla dostawcy stanu sesji Redis.This section contains the required configuration for your ASP.NET application to use the Azure Cache for Redis Session State Provider.

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

Sekcja z komentarzem zawiera przykład atrybutów i ustawień przykładowych dla każdego atrybutu.The commented section provides an example of the attributes and sample settings for each attribute.

Skonfiguruj atrybuty przy użyciu wartości z bloku pamięci podręcznej w Microsoft Azure Portal i skonfiguruj inne wartości zgodnie z potrzebami.Configure the attributes with the values from your cache blade in the Microsoft Azure portal, and configure the other values as desired. Aby uzyskać instrukcje dotyczące uzyskiwania dostępu do właściwości pamięci podręcznej, zobacz Konfigurowanie usługi Azure cache for Redis Settings.For instructions on accessing your cache properties, see Configure Azure Cache for Redis settings.

  • host — Określ punkt końcowy pamięci podręcznej.host – specify your cache endpoint.
  • port — użyj portu bez protokołu TLS/SSL lub portu TLS/SSL, w zależności od ustawień protokołu TLS.port – use either your non-TLS/SSL port or your TLS/SSL port, depending on the TLS settings.
  • AccessKey — Użyj klucza podstawowego lub pomocniczego dla pamięci podręcznej.accessKey – use either the primary or secondary key for your cache.
  • SSL — prawda, jeśli chcesz zabezpieczyć pamięć podręczną/komunikację z klientem przy użyciu protokołu TLS. w przeciwnym razie false.ssl – true if you want to secure cache/client communications with TLS; otherwise false. Upewnij się, że określono prawidłowy port.Be sure to specify the correct port.
    • Port inny niż TLS jest domyślnie wyłączony w przypadku nowych pamięci podręcznych.The non-TLS port is disabled by default for new caches. Określ wartość true dla tego ustawienia, aby używać portu TLS.Specify true for this setting to use the TLS port. Aby uzyskać więcej informacji na temat włączania portu bez protokołu TLS, zobacz sekcję porty dostępu w temacie Konfigurowanie pamięci podręcznej .For more information about enabling the non-TLS port, see the Access Ports section in the Configure a cache topic.
  • parametr throwOnError — wartość true, jeśli chcesz, aby wyjątek był zgłaszany w przypadku niepowodzenia, lub wartość false, jeśli chcesz, aby operacja została zakończona niepowodzeniem.throwOnError – true if you want an exception to be thrown if there is a failure, or false if you want the operation to fail silently. Aby wyszukać błąd, należy sprawdzić Właściwość static Microsoft. Web. Redis. pakietu redissessionstateprovider. LastException.You can check for a failure by checking the static Microsoft.Web.Redis.RedisSessionStateProvider.LastException property. Wartość domyślna to true.The default is true.
  • retryTimeoutInMilliseconds — operacje, które nie powiodły się, są ponawiane w tym interwale, określone w milisekundach.retryTimeoutInMilliseconds – Operations that fail are retried during this interval, specified in milliseconds. Pierwsza ponowna próba nastąpi po 20 milisekundach, a następnie ponowne próby są wykonywane co sekundę do czasu wygaśnięcia interwału retryTimeoutInMilliseconds.The first retry occurs after 20 milliseconds, and then retries occur every second until the retryTimeoutInMilliseconds interval expires. Natychmiast po tym czasie operacja zostanie ponowiona po raz ostatni.Immediately after this interval, the operation is retried one final time. Jeśli operacja nadal kończy się niepowodzeniem, wyjątek jest generowany z powrotem do obiektu wywołującego, w zależności od ustawienia parametr throwOnError.If the operation still fails, the exception is thrown back to the caller, depending on the throwOnError setting. Wartość domyślna to 0, co oznacza brak ponownych prób.The default value is 0, which means no retries.
  • DatabaseID — określa, która baza danych ma być używana do danych wyjściowych pamięci podręcznej.databaseId – Specifies which database to use for cache output data. Jeśli nie zostanie określony, zostanie użyta wartość domyślna 0.If not specified, the default value of 0 is used.
  • ApplicationName — klucze są przechowywane w Redis jako {<Application Name>_<Session ID>}_Data .applicationName – Keys are stored in redis as {<Application Name>_<Session ID>}_Data. Ten schemat nazewnictwa umożliwia wielu aplikacjom współużytkowanie tego samego wystąpienia Redis.This naming scheme enables multiple applications to share the same Redis instance. Ten parametr jest opcjonalny i jeśli nie zostanie on podano, zostanie użyta wartość domyślna.This parameter is optional and if you do not provide it a default value is used.
  • connectionTimeoutInMilliseconds — to ustawienie umożliwia zastąpienie ustawienia connectTimeout w kliencie stackexchange. Redis.connectionTimeoutInMilliseconds – This setting allows you to override the connectTimeout setting in the StackExchange.Redis client. Jeśli nie zostanie określony, zostanie użyte domyślne ustawienie connectTimeout 5000.If not specified, the default connectTimeout setting of 5000 is used. Aby uzyskać więcej informacji, zobacz stackexchange. Redis Configuration model.For more information, see StackExchange.Redis configuration model.
  • operationTimeoutInMilliseconds — to ustawienie umożliwia zastąpienie ustawienia syncTimeout w kliencie stackexchange. Redis.operationTimeoutInMilliseconds – This setting allows you to override the syncTimeout setting in the StackExchange.Redis client. Jeśli nie zostanie określony, zostanie użyte domyślne ustawienie syncTimeout 1000.If not specified, the default syncTimeout setting of 1000 is used. Aby uzyskać więcej informacji, zobacz stackexchange. Redis Configuration model.For more information, see StackExchange.Redis configuration model.
  • redisSerializerType — to ustawienie pozwala określić niestandardową serializację zawartości sesji, która jest wysyłana do Redis.redisSerializerType - This setting allows you to specify custom serialization of session content that is sent to Redis. Określony typ musi implementować Microsoft.Web.Redis.ISerializer i musi deklarować publiczny Konstruktor bez parametrów.The type specified must implement Microsoft.Web.Redis.ISerializer and must declare public parameterless constructor. Domyślnie System.Runtime.Serialization.Formatters.Binary.BinaryFormatter jest używana.By default System.Runtime.Serialization.Formatters.Binary.BinaryFormatter is used.

Aby uzyskać więcej informacji o tych właściwościach, zapoznaj się z ogłoszeniem oryginalnego wpisu w blogu, w którym jest ogłaszany dostawca stanu sesji ASP.NET dla usługi Redis.For more information about these properties, see the original blog post announcement at Announcing ASP.NET Session State Provider for Redis.

Nie zapomnij dodać komentarza do sekcji dostawca stanu sesji InProc w web.config.Don’t forget to comment out the standard InProc session state provider section in your 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 wykonaniu tych kroków aplikacja jest skonfigurowana do korzystania z usługi Azure cache dla dostawcy stanu sesji Redis.Once these steps are performed, your application is configured to use the Azure Cache for Redis Session State Provider. Gdy używasz stanu sesji w aplikacji, jest on przechowywany w pamięci podręcznej platformy Azure dla wystąpienia Redis.When you use session state in your application, it is stored in an Azure Cache for Redis instance.

Ważne

Dane przechowywane w pamięci podręcznej muszą być możliwe do serializacji, w przeciwieństwie do danych, które mogą być przechowywane w domyślnym dostawcy stanu sesji ASP.NET w pamięci.Data stored in the cache must be serializable, unlike the data that can be stored in the default in-memory ASP.NET Session State Provider. Gdy jest używany dostawca stanu sesji dla Redis, należy się upewnić, że typy danych przechowywane w stanie sesji są możliwe do serializacji.When the Session State Provider for Redis is used, be sure that the data types that are being stored in session state are serializable.

Opcje stanu sesji ASP.NETASP.NET Session State options

  • Dostawca stanu sesji w pamięci — ten dostawca przechowuje stan sesji w pamięci.In Memory Session State Provider - This provider stores the Session State in memory. Korzyści wynikające z używania tego dostawcy są proste i szybkie.The benefit of using this provider is it is simple and fast. Nie można jednak skalować Web Apps, jeśli używasz w dostawcy pamięci, ponieważ nie jest on dystrybuowany.However you cannot scale your Web Apps if you are using in memory provider since it is not distributed.
  • Dostawca stanu sesji programu SQL Server — ten dostawca przechowuje stan sesji w programie SQL Server.Sql Server Session State Provider - This provider stores the Session State in Sql Server. Użyj tego dostawcy, jeśli chcesz przechowywać stan sesji w magazynie trwałym.Use this provider if you want to store the Session state in persistent storage. Możesz skalować aplikację sieci Web, ale korzystanie z programu SQL Server dla sesji ma wpływ na wydajność aplikacji sieci Web.You can scale your Web App but using Sql Server for Session has a performance impact on your Web App. Tego dostawcy można także użyć z konfiguracją OLTP w pamięci , aby zwiększyć wydajność.You can also use this provider with an In-Memory OLTP configuration to help improve performance.
  • Dostawca stanu sesji rozproszonej w pamięci, taki jak usługa Azure cache dla dostawcy stanu sesji Redis — ten dostawca zapewnia najlepsze rozwiązanie obu rozwiązań.Distributed In Memory Session State Provider such as Azure Cache for Redis Session State Provider - This provider gives you the best of both worlds. Aplikacja sieci Web może mieć prosty, szybki i skalowalny dostawca stanu sesji.Your Web App can have a simple, fast, and scalable Session State Provider. Ponieważ ten dostawca przechowuje stan sesji w pamięci podręcznej, należy wziąć pod uwagę wszystkie cechy skojarzone podczas rozmowy z pamięcią podręczną rozproszonej pamięci, na przykład przejściowe awarie sieci.Because this provider stores the Session state in a Cache, your app has to take in consideration all the characteristics associated when talking to a Distributed In Memory Cache, such as transient network failures. Aby zapoznać się z najlepszymi rozwiązaniami dotyczącymi używania pamięci podręcznej, zobacz wskazówki dotyczące buforowania ze wzorców firmy Microsoft & wskazówki dotyczące projektowania i wdrażania aplikacji w chmurze AzureFor best practices on using Cache, see Caching guidance from Microsoft Patterns & Practices Azure Cloud Application Design and Implementation Guidance.

Aby uzyskać więcej informacji o stanie sesji i innych najlepszych rozwiązaniach, zobacz najlepsze rozwiązania dotyczące programowania w sieci Web (kompilowanie Real-World aplikacji w chmurze przy użyciu platformy Azure).For more information about session state and other best practices, see Web Development Best Practices (Building Real-World Cloud Apps with Azure).

Dostawcy stanu sesji innych firmThird-party session state providers

Następne krokiNext steps

Sprawdź dostawcę wyjściowej pamięci Podręcznej ASP.NET dla usługi Azure cache for Redis.Check out the ASP.NET Output Cache Provider for Azure Cache for Redis.