ASP.NET-Sitzungszustandsanbieter für Azure Cache for RedisASP.NET Session State Provider for Azure Cache for Redis

Azure Cache for Redis stellt einen Sitzungszustandsanbieter bereit, mit dem Sie den Sitzungszustand im Arbeitsspeicher mit Azure Cache for Redis anstatt in einer SQL Server-Datenbank speichern können.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. Um den Sitzungszustandsanbieter zu verwenden, konfigurieren Sie zuerst den Cache, und konfigurieren Sie danach Ihre ASP.NET-Anwendung für den Cache mithilfe des NuGet-Pakets für den Azure Cache for Redis-Sitzungszustand.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.

Im praktischen Einsatz von Cloud-Apps lässt sich das Speichern von Zustandsinformationen für eine Benutzersitzung oft nicht vermeiden. Allerdings beeinträchtigen einige Herangehensweisen die Leistung und Skalierbarkeit stärker als andere.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. Wenn Sie einen Sitzungszustand speichern müssen, ist es am besten, die Menge der Zustandsinformationen niedrig zu halten und sie in Cookies zu speichern.If you have to store state, the best solution is to keep the amount of state small and store it in cookies. Wenn das nicht umsetzbar ist, besteht die nächstbeste Lösung darin, den ASP.NET-Sitzungszustand mit einem Anbieter für verteilten In-Memory-Cache zu verwenden.If that isn't feasible, the next best solution is to use ASP.NET session state with a provider for distributed, in-memory cache. Die schlechteste Lösung im Hinblick auf Leistung und Skalierbarkeit wäre es, einen datenbankbasierten Sitzungszustandsanbieter zu verwenden.The worst solution from a performance and scalability standpoint is to use a database backed session state provider. Dieses Thema bietet einen Leitfaden zum Verwenden des ASP.NET-Sitzungszustandsanbieters für Azure Cache for Redis.This topic provides guidance on using the ASP.NET Session State Provider for Azure Cache for Redis. Informationen zu anderen Optionen für den Sitzungszustand finden Sie unter Optionen für den ASP.NET-Sitzungszustand.For information on other session state options, see ASP.NET Session State options.

Speichern des ASP.NET-Sitzungsstatus im CacheStore ASP.NET session state in the cache

Klicken Sie zum Konfigurieren einer Clientanwendung in Visual Studio mit dem Azure Cache for Redis-Sitzungszustands-NuGet-Paket im Menü Extras auf NuGet-Paket-Manager > Paket-Manager-Konsole.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.

Führen Sie im Fenster Package Manager Console den folgenden Befehl aus.Run the following command from the Package Manager Console window.

Install-Package Microsoft.Web.RedisSessionStateProvider

Wichtig

Wenn Sie das Clusteringfeature aus dem Premium-Tarif verwenden, müssen Sie RedisSessionStateProvider 2.0.1 oder höher verwenden. Andernfalls wird eine Ausnahme ausgelöst.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. Der Wechsel zu Version 2.0.1 oder einer höheren Version stellt eine grundlegende Änderung dar. Weitere Informationen finden Sie unter Details zur grundlegenden Änderung von Version 2.0.0.Moving to 2.0.1 or higher is a breaking change; for more information, see v2.0.0 Breaking Change Details. Zum Zeitpunkt dieser Artikelüberarbeitung ist die aktuelle Version dieses Pakets 2.2.3.At the time of this article update, the current version of this package is 2.2.3.

Das Redis-Sitzungszustandsanbieter-NuGet-Paket steht in einer Abhängigkeitsbeziehung zum Paket „StackExchange.Redis.StrongName“.The Redis Session State Provider NuGet package has a dependency on the StackExchange.Redis.StrongName package. Wenn das Paket „StackExchange.Redis.StrongName“ nicht in Ihrem Projekt vorhanden ist, wird es installiert.If the StackExchange.Redis.StrongName package is not present in your project, it is installed.

Hinweis

Neben dem Paket „StackExchange.Redis.StrongName“ mit starkem Namen gibt es zudem noch das Paket „StackExchange.Redis“ als Version ohne starken Namen.In addition to the strong-named StackExchange.Redis.StrongName package, there is also the StackExchange.Redis non-strong-named version. Wenn in Ihrem Projekt die Version „StackExchange.Redis“ ohne starken Namen verwendet wird, müssen Sie sie deinstallieren. Andernfalls treten Namenskonflikte in Ihrem Projekt auf.If your project is using the non-strong-named StackExchange.Redis version you must uninstall it, otherwise you get naming conflicts in your project. Weitere Informationen über diese Pakete finden Sie unter Konfigurieren der .NET-Cacheclients.For more information about these packages, see Configure .NET cache clients.

Mit dem heruntergeladenen NuGet-Paket werden die erforderlichen Assemblyverweise sowie der folgende Abschnitt in Ihrer Datei „web.config“ hinzugefügt.The NuGet package downloads and adds the required assembly references and adds the following section into your web.config file. Dieser Abschnitt enthält die Konfiguration, die in Ihrer ASP.NET-Anwendung für die Verwendung des Azure Cache for Redis-Sitzungszustandsanbieters erforderlich ist.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>

Im kommentierten Bereich finden Sie Beispiele der Attribute sowie Beispieleinstellungen für jedes Attribut.The commented section provides an example of the attributes and sample settings for each attribute.

Konfigurieren Sie die Attribute mit den Werten vom Blatt „Cache“ im Microsoft Azure-Portal, und konfigurieren Sie die restlichen Werte wie gewünscht.Configure the attributes with the values from your cache blade in the Microsoft Azure portal, and configure the other values as desired. Anweisungen zum Zugreifen auf die Cacheeigenschaften finden Sie unter Konfigurieren von Azure Cache for Redis-Einstellungen.For instructions on accessing your cache properties, see Configure Azure Cache for Redis settings.

  • host : Geben Sie den Cacheendpunkt an.host – specify your cache endpoint.
  • port : Verwenden Sie abhängig von Ihren SSL-Einstellungen entweder den Nicht-SSL-Port oder den SSL-Port.port – use either your non-SSL port or your SSL port, depending on the ssl settings.
  • accessKey : Verwenden Sie den primären oder sekundären Schlüssel für Ihren Cache.accessKey – use either the primary or secondary key for your cache.
  • ssl : Geben Sie „true“ an, wenn Sie die Kommunikation zwischen Cache und Client mit SSL absichern möchten, andernfalls „false“.ssl – true if you want to secure cache/client communications with ssl; otherwise false. Achten Sie darauf, dass Sie den richtigen Port angeben.Be sure to specify the correct port.
    • Der Nicht-SSL-Port ist für neue Caches standardmäßig deaktiviert.The non-SSL port is disabled by default for new caches. Geben Sie für diese Einstellung „true“ an, wenn Sie den SSL-Port verwenden möchten.Specify true for this setting to use the SSL port. Weitere Informationen zum Aktivieren des Nicht-SSL-Ports finden Sie im Abschnitt Zugriffsports des Themas Konfigurieren eines Caches.For more information about enabling the non-SSL port, see the Access Ports section in the Configure a cache topic.
  • throwOnError: Geben Sie TRUE an, wenn bei einem Fehler eine Ausnahme ausgelöst werden soll, oder FALSE, wenn bei einem nicht ausgeführten Vorgang keine Meldung erfolgen soll.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. Sie können das Vorliegen von Fehlern feststellen, indem Sie die statische Eigenschaft „Microsoft.Web.Redis.RedisSessionStateProvider.LastException“ überprüfen.You can check for a failure by checking the static Microsoft.Web.Redis.RedisSessionStateProvider.LastException property. Der Standardwert ist „true“.The default is true.
  • retryTimeoutInMilliseconds: Bei Fehlern werden Vorgänge für diese Zeitspanne wiederholt (angegeben in Millisekunden).retryTimeoutInMilliseconds – Operations that fail are retried during this interval, specified in milliseconds. Die erste Wiederholung erfolgt nach 20 Millisekunden. Danach wird die Wiederholung jede Sekunde durchgeführt, bis die in „retryTimeoutInMilliseconds“ angegebene Zeitspanne abgelaufen ist.The first retry occurs after 20 milliseconds, and then retries occur every second until the retryTimeoutInMilliseconds interval expires. Unmittelbar nach dieser Zeitspanne wird der Vorgang ein letztes Mal wiederholt.Immediately after this interval, the operation is retried one final time. Wenn dann immer noch ein Fehler bei dem Vorgang auftritt, wird der aufrufenden Funktion eine Ausnahme zurückgegeben, abhängig von der Einstellung für „throwOnError“.If the operation still fails, the exception is thrown back to the caller, depending on the throwOnError setting. Der Standardwert lautet 0, d.h. keine Wiederholungen.The default value is 0, which means no retries.
  • databaseId : Gibt an, welche Datenbank für die Cacheausgabedaten verwendet werden soll.databaseId – Specifies which database to use for cache output data. Wenn Sie hier nichts angeben, wird der Standardwert 0 verwendet.If not specified, the default value of 0 is used.
  • applicationName: Schlüssel werden in Redis als {<Application Name>_<Session ID>}_Data gespeichert.applicationName – Keys are stored in redis as {<Application Name>_<Session ID>}_Data. Durch dieses Benennungsschema wird ermöglicht, dass mehrere Anwendungen dieselbe Redis-Instanz gemeinsam nutzen.This naming scheme enables multiple applications to share the same Redis instance. Dieser Parameter ist optional, und wenn Sie ihn nicht angeben, wird der Standardwert verwendet.This parameter is optional and if you do not provide it a default value is used.
  • connectionTimeoutInMilliseconds : Diese Einstellung ermöglicht Ihnen, die connectTimeout-Einstellung im StackExchange.Redis-Client zu überschreiben.connectionTimeoutInMilliseconds – This setting allows you to override the connectTimeout setting in the StackExchange.Redis client. Wenn Sie sie nicht angegeben, wird die connectTimeout-Standardeinstellung „5000“ verwendet.If not specified, the default connectTimeout setting of 5000 is used. Weitere Informationen finden Sie unter StackExchange.Redis-Konfigurationsmodell.For more information, see StackExchange.Redis configuration model.
  • operationTimeoutInMilliseconds : Diese Einstellung ermöglicht Ihnen, die syncTimeout-Einstellung im StackExchange.Redis-Client zu überschreiben.operationTimeoutInMilliseconds – This setting allows you to override the syncTimeout setting in the StackExchange.Redis client. Wenn Sie sie nicht angegeben, wird die syncTimeout-Standardeinstellung „1000“ verwendet.If not specified, the default syncTimeout setting of 1000 is used. Weitere Informationen finden Sie unter StackExchange.Redis-Konfigurationsmodell.For more information, see StackExchange.Redis configuration model.
  • redisSerializerType: Mit dieser Einstellung können Sie eine benutzerdefinierte Serialisierung des Sitzungsinhalts, der an Redis gesendet wird, angeben.redisSerializerType - This setting allows you to specify custom serialization of session content that is sent to Redis. Der angegebene Typ muss Microsoft.Web.Redis.ISerializer implementieren und einen öffentlichen parameterlosen Konstruktor deklarieren.The type specified must implement Microsoft.Web.Redis.ISerializer and must declare public parameterless constructor. Standardmäßig wird System.Runtime.Serialization.Formatters.Binary.BinaryFormatter verwendet.By default System.Runtime.Serialization.Formatters.Binary.BinaryFormatter is used.

Weitere Informationen über diese Eigenschaften finden Sie im Blogbeitrag mit der ursprünglichen Ankündigung: Announcing ASP.NET Session State Provider for Redis(in englischer Sprache).For more information about these properties, see the original blog post announcement at Announcing ASP.NET Session State Provider for Redis.

Vergessen Sie nicht, den Abschnitt mit dem als Standard verwendeten InProc-Sitzungszustandsanbieter in Ihrer web.config-Datei auszukommentieren.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> -->

Nach Abschluss dieser Schritte ist Ihre Anwendung für die Verwendung des Azure Cache for Redis-Sitzungszustandsanbieters konfiguriert.Once these steps are performed, your application is configured to use the Azure Cache for Redis Session State Provider. Wenn Sie den Sitzungszustand in Ihrer Anwendung verwenden, wird er in einer Azure Cache for Redis-Instanz gespeichert.When you use session state in your application, it is stored in an Azure Cache for Redis instance.

Wichtig

Die im Cache gespeicherten Daten müssen serialisierbar sein. Sie unterscheiden sich darin von den Daten, die im standardmäßigen In-Memory-ASP.NET-Sitzungszustandsanbieter gespeichert werden können.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. Wenn der Sitzungszustandsanbieter für Redis verwendet wird, müssen Sie darauf achten, dass die im Sitzungszustand gespeicherten Datentypen serialisierbar sind.When the Session State Provider for Redis is used, be sure that the data types that are being stored in session state are serializable.

Optionen für den ASP.NET-SitzungszustandASP.NET Session State options

  • In-Memory-Sitzungszustandsanbieter: Dieser Anbieter speichert den Sitzungszustand im Arbeitsspeicher.In Memory Session State Provider - This provider stores the Session State in memory. Der Vorteil bei diesem Anbieter ist, dass er einfach und schnell ist.The benefit of using this provider is it is simple and fast. Wenn Sie einen In-Memory-Anbieter verwenden, können Sie jedoch Ihre Web-Apps nicht skalieren, denn dieser Anbieter ist nicht verteilt.However you cannot scale your Web Apps if you are using in memory provider since it is not distributed.
  • SQL Server-Sitzungszustandsanbieter: Dieser Anbieter speichert den Sitzungszustand in SQL Server.Sql Server Session State Provider - This provider stores the Session State in Sql Server. Verwenden Sie diesen Anbieter, wenn der Sitzungszustand in einem beständigen Speicher gespeichert werden soll.Use this provider if you want to store the Session state in persistent storage. Sie können Ihre Web-App skalieren, die Verwendung von SQL Server für den Sitzungszustand hat jedoch Auswirkungen auf die Leistung der Web-App.You can scale your Web App but using Sql Server for Session has a performance impact on your Web App. Sie können diesen Anbieter auch mit einer In-Memory-OLTP-Konfiguration zur Verbesserung der Leistung verwenden.You can also use this provider with an In-Memory OLTP configuration to help improve performance.
  • Verteilter In-Memory-Sitzungszustandsanbieter wie z.B. Azure Cache for Redis-Sitzungszustandsanbieter: Dieser Anbieter bietet Ihnen das Beste aus beiden Welten.Distributed In Memory Session State Provider such as Azure Cache for Redis Session State Provider - This provider gives you the best of both worlds. Ihre Web-App kann über einen einfachen, schnellen und skalierbaren Sitzungszustandsanbieter verfügen.Your Web App can have a simple, fast, and scalable Session State Provider. Da dieser Anbieter den Sitzungszustand in einem Cache speichert, muss Ihre App so ausgelegt sein, dass die besonderen Merkmale bei der Kommunikation mit einem verteilten In-Memory-Cache berücksichtigt werden, z.B. kurze Netzwerkausfälle.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. Bewährte Verfahren zum Verwenden des Caches finden Sie unter Caching Guidance (in englischer Sprache, aus Microsoft Patterns & Practices, Azure Cloud Application Design and Implementation Guidance).For best practices on using Cache, see Caching guidance from Microsoft Patterns & Practices Azure Cloud Application Design and Implementation Guidance.

Weitere Information über das Thema Sitzungszustand und andere bewährte Verfahren finden Sie unter Web Development Best Practices (Building Real-World Cloud Apps with Azure)(in englischer Sprache).For more information about session state and other best practices, see Web Development Best Practices (Building Real-World Cloud Apps with Azure).

Nächste SchritteNext steps

Lesen Sie ASP.NET-Ausgabecacheanbieter für Azure Cache for Redis.Check out the ASP.NET Output Cache Provider for Azure Cache for Redis.