Udostępnij za pośrednictwem


Dostawca stanu sesji platformy ASP.NET dla usługi Azure Cache for Redis

Usługa Azure Cache for Redis udostępnia dostawcę stanu sesji, którego można użyć do przechowywania stanu sesji w pamięci za pomocą usługi Azure Cache for Redis zamiast bazy danych programu SQL Server. Aby użyć dostawcy stanu sesji buforowania, najpierw skonfiguruj pamięć podręczną, a następnie skonfiguruj aplikację ASP.NET na potrzeby pamięci podręcznej przy użyciu pakietu NuGet stanu sesji usługi Azure Cache for Redis. W przypadku aplikacji ASP.NET Core zapoznaj się z tematem Zarządzanie sesją i stanem w programie ASP.NET Core.

Często nie jest to praktyczne w aplikacji w chmurze, aby uniknąć przechowywania jakiejś formy stanu dla sesji użytkownika, ale niektóre podejścia wpływają na wydajność i skalowalność więcej niż inne. Jeśli musisz przechowywać stan, najlepszym rozwiązaniem jest utrzymanie małej ilości stanu i przechowywanie go w plikach cookie. Jeśli to nie jest możliwe, następnym najlepszym rozwiązaniem jest użycie ASP.NET stanu sesji z dostawcą rozproszonej pamięci podręcznej w pamięci. Najgorszym rozwiązaniem z punktu widzenia wydajności i skalowalności jest użycie dostawcy stanu sesji opartej na bazie danych. Ten artykuł zawiera wskazówki dotyczące korzystania z dostawcy stanu sesji ASP.NET dla usługi Azure Cache for Redis. Aby uzyskać informacje na temat innych opcji stanu sesji, zobacz ASP.NET Opcje stanu sesji.

Przechowywanie stanu sesji programu ASP.NET w pamięci podręcznej

Aby skonfigurować aplikację kliencką w programie Visual Studio przy użyciu pakietu NuGet stanu sesji usługi Azure Cache for Redis, wybierz pozycję NuGet Menedżer pakietów, Menedżer pakietów Konsola z menu Narzędzia.

W oknie Package Manager Console uruchom następujące polecenie.

Install-Package Microsoft.Web.RedisSessionStateProvider

Ważne

Jeśli używasz funkcji klastrowania z warstwy Premium, musisz użyć klasy RedisSessionStateProvider 2.0.1 lub nowszej lub zostanie zgłoszony wyjątek. Przejście do wersji 2.0.1 lub nowszej to zmiana powodująca niezgodność.

Pakiet NuGet dostawcy stanu sesji redis ma zależność od pakietu StackExchange.Redis. Jeśli pakiet StackExchange.Redis nie jest obecny w projekcie, jest zainstalowany.

Pakiet NuGet pobiera i dodaje wymagane odwołania do zestawu oraz dodaje następującą sekcję do pliku web.config. Ta sekcja zawiera wymaganą konfigurację aplikacji ASP.NET do korzystania z dostawcy stanu sesji usługi 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>

Sekcja z komentarzem zawiera przykład atrybutów i przykładowych ustawień dla każdego atrybutu.

Skonfiguruj atrybuty z wartościami po lewej stronie z pamięci podręcznej w witrynie Microsoft Azure Portal i skonfiguruj inne wartości zgodnie z potrzebami. Aby uzyskać instrukcje dotyczące uzyskiwania dostępu do właściwości pamięci podręcznej, zobacz Konfigurowanie ustawień usługi Azure Cache for Redis.

  • host — określ punkt końcowy pamięci podręcznej.
  • port — użyj portu innego niż TLS/SSL lub portu TLS/SSL, w zależności od ustawień protokołu TLS.
  • accessKey — użyj klucza podstawowego lub pomocniczego dla pamięci podręcznej.
  • ssl — wartość true, jeśli chcesz zabezpieczyć komunikację pamięci podręcznej/klienta z protokołem TLS; w przeciwnym razie wartość false. Pamiętaj, aby określić prawidłowy port.
    • Port inny niż TLS jest domyślnie wyłączony dla nowych pamięci podręcznych. Określ wartość true dla tego ustawienia, aby używać portu TLS. Aby uzyskać więcej informacji na temat włączania portu innego niż TLS, zobacz sekcję Porty dostępu w artykule Konfigurowanie pamięci podręcznej .
  • throwOnError — prawda, jeśli chcesz, aby wyjątek był zgłaszany w przypadku wystąpienia błędu lub false, jeśli operacja ma zakończyć się niepowodzeniem w trybie dyskretnym. Możesz sprawdzić błąd, sprawdzając właściwość statyczną Microsoft.Web.Redis.RedisSessionStateProvider.LastException . Wartość domyślna to true.
  • retryTimeoutInMilliseconds — operacje, które kończą się niepowodzeniem, są ponawiane w tym interwale określonym w milisekundach. Pierwsze ponawianie następuje po upływie 20 milisekund, a następnie ponawianie próby następuje co sekundę, aż retryTimeoutInMillisecondinterwał wygaśnie. Natychmiast po tym interwale operacja jest ponawiana po raz ostatni. Jeśli operacja nadal kończy się niepowodzeniem, wyjątek jest zwracany do wywołującego, w zależności od throwOnError ustawienia. Wartość domyślna to 0, co oznacza, że nie ma ponownych prób.
  • databaseId — określa, która baza danych ma być używana na potrzeby danych wyjściowych pamięci podręcznej. Jeśli nie zostanie określona, zostanie użyta wartość domyślna 0.
  • applicationName — klucze są przechowywane w redis jako {<Application Name>_<Session ID>}_Data. Ten schemat nazewnictwa umożliwia wielu aplikacjom współużytkowanie tego samego wystąpienia usługi Redis. Ten parametr jest opcjonalny i jeśli nie podasz jej wartości domyślnej.
  • connectionTimeoutInMilliseconds — to ustawienie umożliwia zastąpienie connectTimeout ustawienia w kliencie StackExchange.Redis. Jeśli nie zostanie określony, zostanie użyte domyślne ustawienie connectTimeout 5000. Aby uzyskać więcej informacji, zobacz StackExchange.Redis configuration model (Model konfiguracji StackExchange.Redis).
  • operationTimeoutInMilliseconds — to ustawienie umożliwia zastąpienie ustawienia syncTimeout w kliencie StackExchange.Redis. Jeśli nie zostanie określony, zostanie użyte ustawienie domyślne syncTimeout 1000. Aby uzyskać więcej informacji, zobacz StackExchange.Redis configuration model (Model konfiguracji StackExchange.Redis).
  • redisSerializerType — to ustawienie umożliwia określenie niestandardowej serializacji zawartości sesji wysyłanej do usługi Redis. Określony typ musi implementować Microsoft.Web.Redis.ISerializer i musi zadeklarować publiczny konstruktor bez parametrów. Domyślnie System.Runtime.Serialization.Formatters.Binary.BinaryFormatter jest używany.

Aby uzyskać więcej informacji na temat tych właściwości, zobacz oryginalny wpis w blogu w ogłoszeniu o ASP.NET dostawca stanu sesji dla usługi Redis.

Nie zapomnij dodać komentarza do sekcji standardowego InProc dostawcy stanu sesji w pliku 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 używania dostawcy stanu sesji usługi Azure Cache for Redis. Gdy używasz stanu sesji w aplikacji, jest on przechowywany w wystąpieniu usługi Azure Cache for Redis.

Ważne

Dane przechowywane w pamięci podręcznej muszą być serializowalne, w przeciwieństwie do danych, które mogą być przechowywane w domyślnej ASP.NET dostawcy stanu sesji. Gdy jest używany dostawca stanu sesji dla usługi Redis, upewnij się, że typy danych przechowywane w stanie sesji są serializowalne.

opcje stanu sesji ASP.NET

  • W dostawcy stanu sesji pamięci — ten dostawca przechowuje stan sesji w pamięci. Zaletą korzystania z tego dostawcy jest prostota i szybkość. Nie można jednak skalować usługi Web Apps, jeśli używasz go u dostawcy pamięci, ponieważ nie jest on dystrybuowany.
  • Dostawca stanu sesji programu Sql Server — ten dostawca przechowuje stan sesji w programie Sql Server. Użyj tego dostawcy, jeśli chcesz przechowywać stan sesji w magazynie trwałym. Aplikację internetową można skalować, ale użycie programu Sql Server dla sesji ma wpływ na wydajność aplikacji internetowej. Możesz również użyć tego dostawcy z konfiguracją OLTP w pamięci, aby zwiększyć wydajność.
  • Dostawca stanu sesji rozproszonej w sesji pamięci, taki jak dostawca stanu sesji usługi Azure Cache for Redis — ten dostawca zapewnia najlepsze z obu środowisk. Aplikacja internetowa może mieć prostego, szybkiego i skalowalnego dostawcę stanu sesji. Ponieważ ten dostawca przechowuje stan sesji w pamięci podręcznej, aplikacja musi wziąć pod uwagę wszystkie cechy skojarzone podczas rozmowy z rozproszoną pamięcią podręczną, takie jak przejściowe błędy sieci. Aby zapoznać się z najlepszymi rozwiązaniami dotyczącymi korzystania z pamięci podręcznej, zobacz wskazówki dotyczące Buforowanie wskazówki dotyczące projektowania i implementacji aplikacji w chmurze platformy Azure.

Aby uzyskać więcej informacji na temat stanu sesji i innych najlepszych rozwiązań, zobacz Web Development Best Practices (Building Real-World Cloud Apps with Azure) (Tworzenie rzeczywistych aplikacji w chmurze za pomocą platformy Azure).

Dostawcy stanu sesji innych firm

Następne kroki

Zapoznaj się z dostawcą wyjściowej pamięci podręcznej ASP.NET dla usługi Azure Cache for Redis.