ASP.NET-Sitzungszustandsanbieter für 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. 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. Informationen zu ASP.NET Core-Anwendungen finden Sie unter Sitzungs- und Zustandsverwaltung in ASP.NET Core.

Im praktischen Einsatz von Cloud-Apps lässt sich das Speichern von Zustandsinformationen einer Benutzersitzung oftmals nicht vermeiden. Einige Herangehensweisen beeinträchtigen jedoch die Leistung und Skalierbarkeit stärker als andere. Wenn Sie einen Sitzungszustand speichern müssen, ist es am besten, die Menge der Zustandsinformationen niedrig zu halten und sie in Cookies zu speichern. 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. Die schlechteste Lösung im Hinblick auf Leistung und Skalierbarkeit wäre es, einen datenbankbasierten Sitzungszustandsanbieter zu verwenden. Dieser Artikel bietet einen Leitfaden zum Verwenden des ASP.NET-Sitzungszustandsanbieters für Azure Cache for Redis. Informationen zu anderen Optionen für den Sitzungszustand finden Sie unter Optionen für den ASP.NET-Sitzungszustand.

Speichern des ASP.NET-Sitzungsstatus im Cache

Wählen Sie im Menü Extras im NuGet-Paket-Manager die Option Paket-Manager-Konsole zum Konfigurieren einer Clientanwendung in Visual Studio mit dem Azure Cache for Redis Session State NuGet-Paket.

Führen Sie im Fenster Package Manager Console den folgenden Befehl aus.

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. Der Wechsel auf 2.0.1 oder höher ist ein Breaking Change.

Das NuGet-Paket für den Redis-Sitzungszustandsanbieter weist eine Abhängigkeit zum Paket „StackExchange.Redis“ auf. Wenn das StackExchange.Redis-Paket in Ihrem Projekt nicht vorhanden ist, wird es installiert.

Mit dem heruntergeladenen NuGet-Paket werden die erforderlichen Assemblyverweise sowie der folgende Abschnitt in Ihrer Datei „web.config“ hinzugefügt. Dieser Abschnitt enthält die Konfiguration, die in Ihrer ASP.NET-Anwendung für die Verwendung des Azure Cache for Redis-Sitzungszustandsanbieters erforderlich ist.

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

Konfigurieren Sie die Attribute mit den Werten auf der linken Seite aus Ihrem Cache im Microsoft Azure-Portal, und konfigurieren Sie die restlichen Werte wie gewünscht. Anweisungen zum Zugreifen auf die Cacheeigenschaften finden Sie unter Konfigurieren von Azure Cache for Redis-Einstellungen.

  • host : Geben Sie den Cacheendpunkt an.
  • port: Verwenden Sie abhängig von Ihren TLS-Einstellungen entweder den Nicht-TLS/SSL-Port oder den TLS/SSL-Port.
  • accessKey : Verwenden Sie den primären oder sekundären Schlüssel für Ihren Cache.
  • ssl: Diese Einstellung ist „true“, wenn Sie die Kommunikation zwischen Cache und Client mit TSL absichern möchten, andernfalls lautet der Wert „false“. Achten Sie darauf, dass Sie den richtigen Port angeben.
    • Der Nicht-TLS-Port ist für neue Caches standardmäßig deaktiviert. Geben Sie für diese Einstellung „true“ an, wenn Sie den TLS-Port verwenden möchten. Weitere Informationen zum Aktivieren des TLS-fremden Ports finden Sie im Abschnitt Zugriffsports des Artikels Konfigurieren eines Caches.
  • 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. Sie können überprüfen, ob ein Fehler aufgetreten ist, indem Sie die statische Eigenschaft Microsoft.Web.Redis.RedisSessionStateProvider.LastException überprüfen. Der Standardwert ist „true“.
  • retryTimeoutInMilliseconds: Bei Fehlern werden Vorgänge für diese Zeitspanne wiederholt (angegeben in Millisekunden). Der erste Wiederholungsversuch erfolgt nach 20 Millisekunden, anschließend wird pro Sekunde ein Wiederholungsversuch ausgeführt, bis das Intervall „retryTimeoutInMilliseconds“ abläuft. Unmittelbar nach dieser Zeitspanne wird der Vorgang ein letztes Mal wiederholt. Wenn für den Vorgang noch immer ein Fehler auftritt, wird die Ausnahme an den Aufrufer abhängig von der Einstellung throwOnError zurückgegeben. Der Standardwert lautet 0, d.h. keine Wiederholungen.
  • databaseId : Gibt an, welche Datenbank für die Cacheausgabedaten verwendet werden soll. Wenn Sie hier nichts angeben, wird der Standardwert 0 verwendet.
  • applicationName: Schlüssel werden in Redis als {<Application Name>_<Session ID>}_Data gespeichert. Durch dieses Benennungsschema wird ermöglicht, dass mehrere Anwendungen dieselbe Redis-Instanz gemeinsam nutzen. Dieser Parameter ist optional, und wenn Sie ihn nicht angeben, wird der Standardwert verwendet.
  • connectionTimeoutInMilliseconds : Diese Einstellung ermöglicht Ihnen, die connectTimeout-Einstellung im StackExchange.Redis-Client zu überschreiben. Wenn Sie sie nicht angegeben, wird die connectTimeout-Standardeinstellung „5000“ verwendet. Weitere Informationen finden Sie unter StackExchange.Redis-Konfigurationsmodell.
  • operationTimeoutInMilliseconds : Diese Einstellung ermöglicht Ihnen, die syncTimeout-Einstellung im StackExchange.Redis-Client zu überschreiben. Erfolgt keine Angabe, wird die syncTimeout-Standardeinstellung von 1.000 verwendet. Weitere Informationen finden Sie unter StackExchange.Redis-Konfigurationsmodell.
  • redisSerializerType: Mit dieser Einstellung können Sie eine benutzerdefinierte Serialisierung des Sitzungsinhalts, der an Redis gesendet wird, angeben. Der angegebene Typ muss Microsoft.Web.Redis.ISerializer implementieren und einen öffentlichen parameterlosen Konstruktor deklarieren. Standardmäßig wird System.Runtime.Serialization.Formatters.Binary.BinaryFormatter verwendet.

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

Vergessen Sie nicht, den standardmäßigen InProc-Sitzungsstatusanbieter in Ihrer Datei web.config auszukommentieren.

<!-- <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. Wenn Sie den Sitzungszustand in Ihrer Anwendung verwenden, wird er in einer Azure Cache for Redis-Instanz gespeichert.

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. Wenn der Sitzungszustandsanbieter für Redis verwendet wird, müssen Sie darauf achten, dass die im Sitzungszustand gespeicherten Datentypen serialisierbar sind.

Optionen für den ASP.NET-Sitzungszustand

  • In-Memory-Sitzungszustandsanbieter: Dieser Anbieter speichert den Sitzungszustand im Arbeitsspeicher. Der Vorteil bei diesem Anbieter ist die Einfachheit und Geschwindigkeit. Wenn Sie einen In-Memory-Anbieter verwenden, können Sie jedoch Ihre Web-Apps nicht skalieren, denn dieser Anbieter ist nicht verteilt.
  • SQL Server-Sitzungszustandsanbieter: Dieser Anbieter speichert den Sitzungszustand in SQL Server. Verwenden Sie diesen Anbieter, wenn der Sitzungszustand in einem beständigen Speicher gespeichert werden soll. 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. Sie können diesen Anbieter auch mit einer In-Memory-OLTP-Konfiguration zur Verbesserung der Leistung verwenden.
  • Verteilter In-Memory-Sitzungszustandsanbieter wie z.B. Azure Cache for Redis-Sitzungszustandsanbieter: Dieser Anbieter bietet Ihnen das Beste aus beiden Welten. Ihre Web-App kann über einen einfachen, schnellen und skalierbaren Sitzungszustandsanbieter verfügen. 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. Bewährte Methoden zur Verwendung von Cache finden Sie in der Caching-Anleitung von 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).

Ausgabecacheanbieter von Drittanbieter

Nächste Schritte

Lesen Sie ASP.NET-Ausgabecacheanbieter für Azure Cache for Redis.