Partager via


État de session de l’application distante

L’état de session d’application distante permet la communication entre l’ASP.NET Core et l’application ASP.NET pour récupérer l’état de session. Cela est activé par l’exposition d’un point de terminaison sur l’application ASP.NET qui peut être interrogé pour récupérer et définir l’état de session.

Sérialisation HttpSessionState

L’objet HttpSessionState doit être sérialisé pour que l’état de session d’application distante soit activé. Cela se fait par l’implémentation du type Microsoft.AspNetCore.SystemWebAdapters.SessionState.Serialization.ISessionSerializer, dont une implémentation d’enregistreur binaire par défaut est fournie. Ceci est ajouté par le code suivant :

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

Configuration

Commencez par suivre les instructions de configuration d’application distante pour connecter le ASP.NET Core et les applications ASP.NET. Il ne reste ensuite que quelques méthodes d’extension supplémentaires à appeler pour activer l’état de session d’application distante.

La configuration pour ASP.NET Core implique l’appel de AddRemoteAppSession et AddJsonSessionSerializer pour l’inscription des types d’éléments de session connus. Le code doit ressembler à ce qui suit :

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();

La prise en charge de session nécessite un travail supplémentaire pour le pipeline ASP.NET Core et elle est désactivée par défaut. Il peut être configuré par itinéraire via des métadonnées ASP.NET Core.

Par exemple, la prise en charge de session nécessite l’un des deux pour annoter un contrôleur :

[Session]
public class SomeController : Controller
{
}

ou pour activer pour tous les points de terminaison par défaut :

app.MapDefaultControllerRoute()
    .RequireSystemWebAdapterSession();

L’équivalent en termes d’infrastructure ressemblerait à la modification suivante dans Global.asax.cs :

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

La session lecture seule récupère l’état de session à partir de l’application de l’infrastructure sans aucun verrouillage. Il s’agit d’une requête GET unique qui retourne un état de session et peut être fermée immédiatement.

Readonly session will retrieve the session state from the framework app

Inscriptible

Le protocole d’état de session pouvant être écrit commence par le même que le lecture seule, mais diffère dans les points suivants :

  • Nécessite une requête PUT supplémentaire pour mettre à jour l’état
  • La requête GET initiale doit rester ouverte jusqu’à ce que la session soit terminée ; si elle est fermée, la session ne pourra pas être mise à jour

Writeable session state protocol starts with the same as the readonly