Compartir a través de


Estado de sesión de la aplicación remota

El estado de sesión de la aplicación remota permitirá la comunicación entre el ASP.NET Core y ASP.NET aplicación para recuperar el estado de sesión. Esto se habilita mediante la exposición de un punto de conexión en la aplicación ASP.NET que se puede consultar para recuperar y establecer el estado de sesión.

Serialización httpSessionState

El HttpSessionState objeto debe serializarse para que se habilite el estado de sesión de la aplicación remota. Esto se logra mediante la implementación del tipo Microsoft.AspNetCore.SystemWebAdapters.SessionState.Serialization.ISessionSerializer, de la que se proporciona una implementación predeterminada del sistema de escritura binario. Esto se agrega mediante el código siguiente:

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

Configuración

En primer lugar, siga las instrucciones de configuración de la aplicación remota para conectar las aplicaciones de ASP.NET Core y ASP.NET. A continuación, sólo hay que llamar a un par de métodos de extensión adicionales para habilitar el estado de sesión de la aplicación remota.

La configuración de ASP.NET Core implica llamar a AddRemoteAppSession y AddJsonSessionSerializer registrar los tipos de elementos de sesión conocidos. El código debe ser similar al siguiente:

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 compatibilidad con la sesión requiere trabajo adicional para la canalización de ASP.NET Core y no está activada de forma predeterminada. Se puede configurar por ruta a través de ASP.NET Core metadatos.

Por ejemplo, la compatibilidad con la sesión requiere anotar un controlador:

[Session]
public class SomeController : Controller
{
}

o para habilitar para todos los puntos de conexión de forma predeterminada:

app.MapDefaultControllerRoute()
    .RequireSystemWebAdapterSession();

El equivalente del framework sería similar al siguiente cambio en 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();

Protocolo

Solo lectura

La sesión de Readonly recuperará el estado de sesión del framework de la aplicación sin ningún tipo de bloqueo. Esto consta de una única GET solicitud que devolverá un estado de sesión y se puede cerrar inmediatamente.

Readonly session will retrieve the session state from the framework app

Writeable (Grabable)

El protocolo de estado de sesión que se puede escribir comienza con el mismo que el de solo lectura, pero difiere en lo siguiente:

  • Requiere una solicitud adicional PUT para actualizar el estado
  • La solicitud inicial GET debe mantenerse abierta hasta que se realice la sesión; si se cierra, la sesión no podrá actualizarse

Writeable session state protocol starts with the same as the readonly