ASP.NET do migracji stanu sesji przyrostowej ASP.NET Core
Stan sesji
Stan sesji w ASP.NET Framework zapewnia wiele funkcji, które ASP.NET Core nie zapewnia. Aby zaktualizować z platformy ASP.NET Framework do rdzenia, karty udostępniają mechanizmy umożliwiające wypełnianie stanu sesji przy użyciu podobnego zachowania, jak System.Web
to miało się stało. Oto niektóre różnice między strukturą a rdzeniem:
- ASP.NET Framework zablokuje użycie sesji w ramach sesji, więc kolejne żądania w sesji są obsługiwane w sposób seryjny. Różni się to od ASP.NET Core, która nie zapewnia żadnej z tych gwarancji.
- ASP.NET Framework będzie serializować i deserializować obiekty automatycznie (chyba że są wykonywane w pamięci). ASP.NET Core udostępnia mechanizm przechowywania
byte[]
danego klucza. Użytkownik musi ręcznie wykonać serializacji/deserializacji obiektów.
Infrastruktura karty uwidacznia dwa interfejsy, których można użyć do zaimplementowania dowolnego systemu magazynowania sesji. Są to:
Microsoft.AspNetCore.SystemWebAdapters.ISessionManager
: Ma to jedną metodę, która jest przekazywana HttpContext i metadanych sesji i oczekujeISessionState
, że obiekt zostanie zwrócony.Microsoft.AspNetCore.SystemWebAdapters.ISessionState
: Opisuje stan obiektu sesji. Jest on używany jako kopia zapasowa HttpSessionState typu.
Serializacja
Ponieważ karty zapewniają możliwość pracy ze stanem sesji silnie typizowanej, musimy mieć możliwość serializacji i deserializacji typów. Jest to dostosowane za pomocą elementu Microsoft.AspNetCore.SystemWebAdapters.SessionState.Serialization.ISessionKeySerializer
.
Domyślna implementacja JSON jest udostępniana, która jest skonfigurowana za pośrednictwem elementu JsonSessionSerializerOptions
:
RegisterKey<T>(string)
- Rejestruje klucz sesji do znanego typu. Jest to wymagane w celu poprawnego serializowania/deserializacji stanu sesji. Jeśli zostanie znaleziony klucz, dla którego nie ma rejestracji, zostanie zgłoszony błąd, a sesja nie będzie dostępna.
builder.Services.AddSystemWebAdapters()
.AddJsonSessionSerializer(options =>
{
// Serialization/deserialization requires each session key to be registered to a type
options.RegisterKey<int>("test-value");
});
Implementacje
Istnieją dwie dostępne implementacje obiektu stanu sesji, które są obecnie dostarczane, każdy z niektórych kompromisów funkcji. Najlepszy wybór aplikacji może zależeć od części migracji i może ulec zmianie w miarę upływu czasu.
- Silnie typizowane: zapewnia możliwość uzyskiwania dostępu do obiektu i może być rzutowany do oczekiwanego typu
- Blokowanie: zapewnia kolejkowanie wielu żądań w ramach jednej sesji i nie uzyskuje dostępu do sesji w tym samym czasie
- Autonomiczny: użyj polecenia , gdy nie udostępniasz sesji między platformą ASP.NET Framework i platformą ASP.NET Core, aby uniknąć modyfikowania kodu w bibliotekach klas odwołujących się do sessionState
Poniżej przedstawiono dostępne implementacje:
Implementacja | Jednoznaczność | Blokowanie | Autonomiczne |
---|---|---|---|
Aplikacja zdalna | ✔️ | ✔️ | ⛔ |
Opakowana ASP.NET Core | ✔️ | ⛔ | ✔️ |