Udostępnij za pośrednictwem


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 oczekuje ISessionState , ż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 ✔️ ✔️