Sdílet prostřednictvím


ASP.NET na migraci stavu přírůstkové relace ASP.NET Core

Stav relace

Stav relace v ASP.NET Framework poskytuje řadu funkcí, které ASP.NET Core neposkytuje. Aby bylo možné aktualizovat z rozhraní ASP.NET Framework na jádro, poskytují adaptéry mechanismy, které umožňují naplnění stavu relace podobným chováním, jako System.Web tomu bylo. Mezi rozdíly mezi architekturou a jádrem patří:

  • ASP.NET Framework by uzamkl využití relací v rámci relace, takže následné požadavky v relaci se zpracovávají sériově. Liší se od ASP.NET Core, která neposkytuje žádné z těchto záruk.
  • ASP.NET Framework by serializoval a deserializoval objekty automaticky (pokud není provedeno v paměti). ASP.NET Core poskytuje mechanismus pro uložení byte[] daného klíče. Jakýkoli objekt serializace/deserializace musí uživatel provést ručně.

Infrastruktura adaptéru zveřejňuje dvě rozhraní, která lze použít k implementaci libovolného systému úložiště relací. Jedná se o:

  • Microsoft.AspNetCore.SystemWebAdapters.ISessionManager: Tato metoda má jednu metodu, která se předá HttpContext metadata relace a očekává vrácení objektu ISessionState .
  • Microsoft.AspNetCore.SystemWebAdapters.ISessionState: Popisuje stav objektu relace. Používá se jako zadní část HttpSessionState typu.

Serializace

Protože adaptéry poskytují možnost pracovat se stavem relace silného typu, musíme být schopni serializovat a deserializovat typy. To je přizpůsobeno prostřednictvím Microsoft.AspNetCore.SystemWebAdapters.SessionState.Serialization.ISessionKeySerializer.

K dispozici je výchozí implementace JSON, která se konfiguruje prostřednictvím JsonSessionSerializerOptions:

  • RegisterKey<T>(string) - Zaregistruje klíč relace ke známému typu. To se vyžaduje, aby bylo možné serializovat nebo deserializovat stav relace správně. Pokud se zjistí, že neexistuje žádná registrace, vyvolá se chyba a relace nebude k dispozici.
builder.Services.AddSystemWebAdapters()
    .AddJsonSessionSerializer(options =>
    {
        // Serialization/deserialization requires each session key to be registered to a type
        options.RegisterKey<int>("test-value");
    });

Implementace

Existují dvě dostupné implementace objektu stavu relace, které jsou aktuálně dodávány, každý s některými kompromisy z funkcí. Nejlepší volba pro aplikaci může záviset na tom, ve které části migrace se nachází, a v průběhu času se může měnit.

  • Silné typy: Poskytuje možnost přístupu k objektu a lze přetypovat na očekávaný typ.
  • Uzamčení: Zajišťuje, že v rámci jedné relace se zařadí více požadavků do fronty a současně k relaci nepřistupuje.
  • Samostatně: Používá se, pokud nesdílíte relaci mezi rozhraním ASP.NET Framework a ASP.NET Core, abyste se vyhnuli úpravám kódu v knihovnách tříd, které odkazují na SessionState.

Níže jsou k dispozici implementace:

Implementace Silná typová kontrola Uzamčení Samostatné
Vzdálená aplikace ✔️ ✔️
Zabalené jádro ASP.NET ✔️ ✔️