Condividi tramite


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 un ISessionState 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 ✔️ ✔️