Teilen über


Remote-App-Sitzungsstatus

Der Remote-App-Sitzungsstatus ermöglicht die Kommunikation zwischen der ASP.NET Core- und ASP.NET-App, um den Sitzungsstatus abzurufen. Dies wird aktiviert, indem ein Endpunkt für die ASP.NET-App verfügbar gemacht wird, der abgefragt werden kann, um den Sitzungsstatus abzurufen und festzulegen.

HttpSessionState-Serialisierung

Das HttpSessionState-Objekt muss serialisiert werden, damit der Remote-App-Sitzungsstatus aktiviert werden kann. Dies wird durch die Implementierung des Typs Microsoft.AspNetCore.SystemWebAdapters.SessionState.Serialization.ISessionSerializer erreicht, von dem eine standardmäßige Binary-Writer-Implementierung bereitgestellt wird. Dies wird durch den folgenden Code hinzugefügt:

builder.Services.AddSystemWebAdapters()
    .AddSessionSerializer(options =>
    {
        // Customize session serialization here
    });

Konfiguration

Befolgen Sie zunächst die Anweisungen zum Einrichten der Remote-App, um eine Verbindung zwischen der ASP.NET Core-App und der ASP.NET-App herzustellen. Dann gibt es nur ein paar zusätzliche Erweiterungsmethoden, die aufgerufen werden können, um den Remote-App-Sitzungsstatus zu aktivieren.

Die Konfiguration für ASP.NET Core umfasst das Aufrufen von AddRemoteAppSession und AddJsonSessionSerializer, um bekannte Sitzungselementtypen zu registrieren. Der Code sollte in etwa wie folgt aussehen:

builder.Services.AddSystemWebAdapters()
    .AddJsonSessionSerializer(options =>
    {
        // Serialization/deserialization requires each session key to be registered to a type
        options.RegisterKey<int>("test-value");
        options.RegisterKey<SessionDemoModel>("SampleSessionItem");
    })
    .AddRemoteAppClient(options =>
    {
        // Provide the URL for the remote app that has enabled session querying
        options.RemoteAppUrl = new(builder.Configuration["ReverseProxy:Clusters:fallbackCluster:Destinations:fallbackApp:Address"]);

        // Provide a strong API key that will be used to authenticate the request on the remote app for querying the session
        options.ApiKey = builder.Configuration["RemoteAppApiKey"];
    })
    .AddSessionClient();

Die Sitzungsunterstützung erfordert zusätzlichen Aufwand für die ASP.NET Core-Pipeline und ist standardmäßig nicht aktiviert. Sie kann routenbezogen über ASP.NET Core-Metadaten konfiguriert werden.

Die Sitzungsunterstützung erfordert beispielsweise entweder, dass ein Controller mit Anmerkungen versehen wird:

[Session]
public class SomeController : Controller
{
}

oder standardmäßig die Aktivierung für alle Endpunkte erfolgt:

app.MapDefaultControllerRoute()
    .RequireSystemWebAdapterSession();

Das Frameworkäquivalent würde wie die folgende Änderung in Global.asax.cs aussehen:

SystemWebAdapterConfiguration.AddSystemWebAdapters(this)
    .AddJsonSessionSerializer(options =>
    {
        // Serialization/deserialization requires each session key to be registered to a type
        options.RegisterKey<int>("test-value");
        options.RegisterKey<SessionDemoModel>("SampleSessionItem");
    })
    // Provide a strong API key that will be used to authenticate the request on the remote app for querying the session
    // ApiKey is a string representing a GUID
    .AddRemoteAppServer(options => options.ApiKey = ConfigurationManager.AppSettings["RemoteAppApiKey"])
    .AddSessionServer();

Protocol

Readonly

Die schreibgeschützte Sitzung ruft den Sitzungsstatus ohne jede Art von Sperrung aus der Framework-App ab. Dies besteht aus einer einzelnen GET-Anforderung, die einen Sitzungsstatus zurückgibt und sofort geschlossen werden kann.

Readonly session will retrieve the session state from the framework app

Schreibbar

Das beschreibbare Sitzungsstatusprotokoll beginnt genauso wie das schreibgeschützte Protokoll, unterscheidet sich jedoch im Folgenden:

  • Erfordert eine zusätzliche PUT-Anforderung, um den Status zu aktualisieren
  • Die ursprüngliche GET-Anforderung muss geöffnet bleiben, bis die Sitzung abgeschlossen ist. Wenn sie geschlossen wird, kann die Sitzung nicht aktualisiert werden

Writeable session state protocol starts with the same as the readonly