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