ASP.NET alla migrazione dello stato della sessione incrementale core ASP.NET
Stato della sessione
Lo stato della sessione in ASP.NET Framework ha fornito una serie di funzionalità che ASP.NET Core non fornisce. Per eseguire l'aggiornamento da ASP.NET Framework a Core, gli adattatori forniscono meccanismi per abilitare il popolamento dello stato della sessione con un comportamento simile.System.Web
Alcune delle differenze tra framework e core sono:
- ASP.NET Framework blocca l'utilizzo della sessione all'interno di una sessione, quindi le richieste successive in una sessione vengono gestite in modo seriale. Questo comportamento è diverso da ASP.NET Core che non fornisce alcuna di queste garanzie.
- ASP.NET Framework serializzerebbe e deserializzerebbe automaticamente gli oggetti (a meno che non vengano eseguiti in memoria). ASP.NET Core fornisce un meccanismo per archiviare una
byte[]
determinata chiave. Qualsiasi serializzazione/deserializzazione di oggetti deve essere eseguita manualmente dall'utente.
L'infrastruttura dell'adattatore espone due interfacce che possono essere usate per implementare qualsiasi sistema di archiviazione delle sessioni. Si tratta di:
Microsoft.AspNetCore.SystemWebAdapters.ISessionManager
: include un singolo metodo che ottiene un HttpContext oggetto e i metadati della sessione e prevede che venga restituito unISessionState
oggetto.Microsoft.AspNetCore.SystemWebAdapters.ISessionState
: descrive lo stato di un oggetto sessione. Viene usato come supporto del HttpSessionState tipo.
Serializzazione
Poiché gli adattatori offrono la possibilità di lavorare con uno stato sessione fortemente tipizzato, è necessario essere in grado di serializzare e deserializzare i tipi. Questa operazione viene personalizzata tramite .Microsoft.AspNetCore.SystemWebAdapters.SessionState.Serialization.ISessionKeySerializer
Viene fornita un'implementazione JSON predefinita configurata tramite JsonSessionSerializerOptions
:
RegisterKey<T>(string)
- Registra una chiave di sessione in un tipo noto. Questa operazione è necessaria per serializzare/deserializzare correttamente lo stato della sessione. Se viene rilevata una chiave per cui non è presente alcuna registrazione, verrà generato un errore e la sessione non sarà disponibile.
builder.Services.AddSystemWebAdapters()
.AddJsonSessionSerializer(options =>
{
// Serialization/deserialization requires each session key to be registered to a type
options.RegisterKey<int>("test-value");
});
Implementazioni
Esistono due implementazioni disponibili dell'oggetto stato sessione attualmente disponibili, ognuna con alcuni compromessi di funzionalità. La scelta migliore per un'app può dipendere da quale parte della migrazione si trova e può cambiare nel tempo.
- Fortemente tipizzato: offre la possibilità di accedere a un oggetto e può essere eseguito il cast al tipo previsto
- Blocco: garantisce che più richieste all'interno di una singola sessione vengano accodate e non accedano contemporaneamente alla sessione
- Autonomo: usare quando non si condivide la sessione tra ASP.NET Framework e ASP.NET Core per evitare di modificare il codice nelle librerie di classi che fanno riferimento a SessionState
Di seguito sono riportate le implementazioni disponibili:
Implementazione | Fortemente tipizzato | Blocco | Autonomo |
---|---|---|---|
App remota | ✔️ | ✔️ | ⛔ |
Wrapped ASP.NET Core | ✔️ | ⛔ | ✔️ |