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