Поставщик состояний сеансов ASP.NET для кэша Azure для RedisASP.NET Session State Provider for Azure Cache for Redis

Кэш Azure для Redis предоставляет поставщика состояний сеансов, который вы можете использовать для сохранения состояния сеанса в памяти с помощью кэша Azure для Redis вместо базы данных 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. Для использования поставщика состояний сеансов с кэшированием сначала настройте кэш, а затем настройте приложение ASP.NET для кэша с помощью пакета кэша Azure для Redis NuGet для состояний сеансов.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.

Не хранить определенные виды состояний сеансов пользователя в реальном облачном приложении бывает нецелесообразно, но разные подходы по-разному влияют на производительность и масштабируемость.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. Если вам нужно хранить состояния, лучшим решением будет хранить небольшой объем состояний в файлах cookie.If you have to store state, the best solution is to keep the amount of state small and store it in cookies. Если это невозможно, лучшей альтернативой будет использование состояний сеансов ASP.NET с помощью поставщика распределенного кэша в памяти.If that isn't feasible, the next best solution is to use ASP.NET session state with a provider for distributed, in-memory cache. Худшее решение с точки зрения масштабируемости и производительности — использовать базу данных резервного поставщика состояний сеансов.The worst solution from a performance and scalability standpoint is to use a database backed session state provider. Эта статья содержит указания по использованию поставщика состояний сеансов ASP.NET для кэша Azure для Redis.This topic provides guidance on using the ASP.NET Session State Provider for Azure Cache for Redis. Сведения о других параметрах состояний сеансов см. в разделе Параметры состояний сеансов ASP.NET.For information on other session state options, see ASP.NET Session State options.

Сохранение состояния сеанса ASP.NET в кэшеStore ASP.NET session state in the cache

Чтобы настроить клиентское приложение в Visual Studio, используя пакет NuGet состояний сеансов кэша Azure для Redis, в меню Сервис выберите Диспетчер пакетов NuGet, а затем Консоль диспетчера пакетов.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.

Выполните следующую команду в окне Package Manager Console:Run the following command from the Package Manager Console window.

Install-Package Microsoft.Web.RedisSessionStateProvider

Важно!

Если вы используете функцию кластеризации на уровне "Премиум", вы увидите RedisSessionStateProvider 2.0.1 (или более новую версию), либо будет создано исключение.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. Переход на 2.0.1 или более новую версию — это критическое изменение. Дополнительные сведения см. на странице v2.0.0 Breaking Change Details (Подробные сведения о критических изменениях в версии 2.0.0).Moving to 2.0.1 or higher is a breaking change; for more information, see v2.0.0 Breaking Change Details. На момент обновления этой статьи текущей версией пакета является версия 2.2.3.At the time of this article update, the current version of this package is 2.2.3.

Пакет NuGet поставщика состояний сеансов Redis зависит от пакета StackExchange.Redis.StrongName.The Redis Session State Provider NuGet package has a dependency on the StackExchange.Redis.StrongName package. Если в проекте отсутствует пакет StackExchange.Redis.StrongName, то он будет установлен.If the StackExchange.Redis.StrongName package is not present in your project, it is installed.

Примечание

Помимо пакета со строгим именем StackExchange.Redis.StrongName существует также версия с нестрогим именем StackExchange.Redis.In addition to the strong-named StackExchange.Redis.StrongName package, there is also the StackExchange.Redis non-strong-named version. Если проект использует версию с нестрогим именем StackExchange.Redis, то необходимо удалить ее. В противном случае в проекте возникнет конфликт имен.If your project is using the non-strong-named StackExchange.Redis version you must uninstall it, otherwise you get naming conflicts in your project. Дополнительные сведения об этих пакетах см. в разделе Настройка клиентов кэша .NET.For more information about these packages, see Configure .NET cache clients.

Пакет NuGet скачивает и добавляет требуемые ссылки на сборку и добавляет следующий раздел в файл web.config.The NuGet package downloads and adds the required assembly references and adds the following section into your web.config file. Этот раздел содержит необходимые настройки для приложения ASP.NET, позволяющие использовать поставщика состояний сеансов для кэша Azure для 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>

Раздел с комментариями содержит пример атрибутов и возможные настройки для каждого из них.The commented section provides an example of the attributes and sample settings for each attribute.

Задайте для атрибутов значения из колонки своего кэша на портале Microsoft Azure и настройте другие параметры по своему усмотрению.Configure the attributes with the values from your cache blade in the Microsoft Azure portal, and configure the other values as desired. Инструкции по доступу к свойствам кэша см. в разделе Настройка параметров кэша Azure для Redis.For instructions on accessing your cache properties, see Configure Azure Cache for Redis settings.

  • host — укажите конечную точку кэша.host – specify your cache endpoint.
  • port — используйте порт без или с SSL в зависимости от параметров SSL.port – use either your non-SSL port or your SSL port, depending on the ssl settings.
  • accessKey — используйте для кэша первичный или вторичный ключ.accessKey – use either the primary or secondary key for your cache.
  • ssl — задайте значение true, если нужно обеспечить безопасный обмен данными между клиентом и кэшем с помощью SSL. В противном случае задайте значение false.ssl – true if you want to secure cache/client communications with ssl; otherwise false. Обязательно укажите правильный порт.Be sure to specify the correct port.
    • Для новых кэшей не SSL порт по умолчанию запрещен.The non-SSL port is disabled by default for new caches. Если вы хотите, чтобы для этого параметра использовался SSL-порт, укажите значение true.Specify true for this setting to use the SSL port. Дополнительные сведения о том, как настроить использование порта без SSL, см. в статье Настройка кэша в разделе Порты доступа.For more information about enabling the non-SSL port, see the Access Ports section in the Configure a cache topic.
  • throwOnError — укажите значение true, если в случае сбоя следует вызывать исключение, или укажите значение false, если вы не хотите получать уведомления о сбоях операций.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. Наличие сбоя можно обнаружить путем проверки статического свойства Microsoft.Web.Redis.RedisSessionStateProvider.LastException.You can check for a failure by checking the static Microsoft.Web.Redis.RedisSessionStateProvider.LastException property. Значение по умолчанию — true.The default is true.
  • retryTimeoutInMilliseconds — в течение этого интервала (указывается в миллисекундах) для неудачных операций выполняются повторные попытки.retryTimeoutInMilliseconds – Operations that fail are retried during this interval, specified in milliseconds. Первая повторная попытка происходит через 20 миллисекунд, а затем попытки повторяются каждую секунду до истечения интервала retryTimeoutInMilliseconds.The first retry occurs after 20 milliseconds, and then retries occur every second until the retryTimeoutInMilliseconds interval expires. Сразу после этого интервала операция повторяется еще один последний раз.Immediately after this interval, the operation is retried one final time. Если операция по-прежнему заканчивается сбоем, вызывающему объекту отправляется исключение (в зависимости от значения параметра throwOnError).If the operation still fails, the exception is thrown back to the caller, depending on the throwOnError setting. Значение по умолчанию — 0, что означает нулевое количество попыток.The default value is 0, which means no retries.
  • databaseId — этот параметр указывает базу данных, которую необходимо использовать для выходных данных кэша.databaseId – Specifies which database to use for cache output data. Если значение в этом поле не задано, по умолчанию используется значение 0.If not specified, the default value of 0 is used.
  • applicationName — ключи хранятся в кэше Redis как {<Application Name>_<Session ID>}_Data.applicationName – Keys are stored in redis as {<Application Name>_<Session ID>}_Data. Такая схема именования позволяет нескольким приложениям совместно использовать один экземпляр Redis.This naming scheme enables multiple applications to share the same Redis instance. Этот параметр — необязательный, и, если для него не указано другое значение, используется значение по умолчанию.This parameter is optional and if you do not provide it a default value is used.
  • connectionTimeoutInMilliseconds — этот параметр позволяет переопределить параметр connectTimeout в клиенте StackExchange.Redis.connectionTimeoutInMilliseconds – This setting allows you to override the connectTimeout setting in the StackExchange.Redis client. Если для параметра connectTimeout значение не указано, по умолчанию используется значение 5000.If not specified, the default connectTimeout setting of 5000 is used. Дополнительную информацию см. в статье Модель конфигурации StackExchange.Redis.For more information, see StackExchange.Redis configuration model.
  • operationTimeoutInMilliseconds — этот параметр позволяет переопределить параметр syncTimeout в клиенте StackExchange.Redis.operationTimeoutInMilliseconds – This setting allows you to override the syncTimeout setting in the StackExchange.Redis client. Если для параметра syncTimeout значение не указано, по умолчанию используется значение 1000.If not specified, the default syncTimeout setting of 1000 is used. Дополнительную информацию см. в статье Модель конфигурации StackExchange.Redis.For more information, see StackExchange.Redis configuration model.
  • redisSerializerType — этот параметр позволяет задать пользовательскую сериализацию содержимого сеанса, отправляемого в Redis.redisSerializerType - This setting allows you to specify custom serialization of session content that is sent to Redis. Указанный тип должен реализовывать Microsoft.Web.Redis.ISerializer и объявить общедоступный конструктор без параметров.The type specified must implement Microsoft.Web.Redis.ISerializer and must declare public parameterless constructor. По умолчанию используется System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.By default System.Runtime.Serialization.Formatters.Binary.BinaryFormatter is used.

Дополнительные сведения об этих свойствах см. в записи блога Объявление поставщика состояний сеансов ASP.NET для кэша Redis.For more information about these properties, see the original blog post announcement at Announcing ASP.NET Session State Provider for Redis.

Не забудьте закомментировать стандартный раздел поставщика состояний сеансов InProc в своем файле 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> -->

После выполнения этих шагов приложение будет настроено для использования поставщика состояний сеансов для кэша Azure для Redis.Once these steps are performed, your application is configured to use the Azure Cache for Redis Session State Provider. При использовании состояния сеанса в приложении состояние хранится в экземпляре кэша Azure для Redis.When you use session state in your application, it is stored in an Azure Cache for Redis instance.

Важно!

В отличие от данных, которые могут храниться в используемом по умолчанию в памяти поставщике состояний сеансов ASP.NET, данные, хранящиеся в кэше, должны быть сериализуемыми.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. При использовании поставщика состояний сеансов для кэша Redis убедитесь, что типы данных, хранящиеся в состоянии сеанса, — сериализуемые.When the Session State Provider for Redis is used, be sure that the data types that are being stored in session state are serializable.

Параметры состояния сеанса ASP.NETASP.NET Session State options

  • Поставщик состояний сеансов в памяти сохраняет состояние сеанса в памяти.In Memory Session State Provider - This provider stores the Session State in memory. Преимущества использования этого поставщика заключаются в его простоте и скорости.The benefit of using this provider is it is simple and fast. Но если вы используете поставщик в памяти, вы не сможете масштабировать свои веб-приложения, так как поставщик не распределяется.However you cannot scale your Web Apps if you are using in memory provider since it is not distributed.
  • Поставщик состояний сеансов в базе данных SQL Server сохраняет состояние сеанса в базе данных SQL Server.Sql Server Session State Provider - This provider stores the Session State in Sql Server. Используйте этот поставщик, если требуется сохранять состояние сеанса в постоянном хранилище.Use this provider if you want to store the Session state in persistent storage. Вы можете масштабировать свое веб-приложение, но использование SQL Server для сеанса может негативно повлиять на производительность веб-приложения.You can scale your Web App but using Sql Server for Session has a performance impact on your Web App. Кроме того, вы можете повысить производительность, применяя этот поставщик с конфигурацией выполняющейся в памяти OLTP.You can also use this provider with an In-Memory OLTP configuration to help improve performance.
  • Распределенный в памяти поставщик состояний сеансов, например поставщик состояний сеансов для кэша Azure для Redis, обладает преимуществами предыдущих двух поставщиков.Distributed In Memory Session State Provider such as Azure Cache for Redis Session State Provider - This provider gives you the best of both worlds. Веб-приложение может использовать простой, быстрый и масштабируемый поставщик состояний сеансов.Your Web App can have a simple, fast, and scalable Session State Provider. Этот поставщик сохраняет состояние сеанса в кэше, поэтому ваше приложение должно принимать в расчет все характеристики, связанные с распределенным кэшем в памяти, например временные неполадки в сети.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. Рекомендации по использованию кэша см. в статье Руководство по кэшированию из коллекции шаблонов и рекомендаций Майкрософт Руководство по разработке и реализации облачного приложения Azure.For best practices on using Cache, see Caching guidance from Microsoft Patterns & Practices Azure Cloud Application Design and Implementation Guidance.

Дополнительные сведения о состоянии сеанса и другие рекомендации см. в статье Рекомендации по веб-разработке (создание реальных облачных приложений с помощью Azure).For more information about session state and other best practices, see Web Development Best Practices (Building Real-World Cloud Apps with Azure).

Поставщики государств-сеансов сторонних сторонThird-party session state providers

Дальнейшие действияNext steps

Ознакомьтесь со статьей ASP.NET Output Cache Provider for Azure Cache for Redis (Поставщик кэша вывода ASP.NET для кэша Azure для Redis).Check out the ASP.NET Output Cache Provider for Azure Cache for Redis.