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í objektuISessionState
.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 | ✔️ | ⛔ | ✔️ |