Bagikan melalui


ASP.NET untuk ASP.NET migrasi status sesi inkremental Core

Status Sesi

Status sesi dalam ASP.NET Framework menyediakan sejumlah fitur yang tidak disediakan ASP.NET Core. Untuk memperbarui dari ASP.NET Framework ke Core, adaptor menyediakan mekanisme untuk memungkinkan mengisi status sesi dengan perilaku yang sama seperti System.Web sebelumnya. Beberapa perbedaan antara kerangka kerja dan inti adalah:

  • ASP.NET Framework akan mengunci penggunaan sesi dalam sesi, sehingga permintaan berikutnya dalam sesi ditangani secara serial. Ini berbeda dari ASP.NET Core yang tidak memberikan salah satu jaminan ini.
  • ASP.NET Framework akan menserialisasikan dan mendeserialisasi objek secara otomatis (kecuali dilakukan dalam memori). ASP.NET Core menyediakan mekanisme untuk menyimpan kunci tertentu byte[] . Setiap serialisasi/deserialisasi objek harus dilakukan secara manual oleh pengguna.

Infrastruktur adaptor mengekspos dua antarmuka yang dapat digunakan untuk mengimplementasikan sistem penyimpanan sesi apa pun. Ini adalah:

  • Microsoft.AspNetCore.SystemWebAdapters.ISessionManager: Ini memiliki satu metode yang diteruskan HttpContext dan metadata sesi dan mengharapkan ISessionState objek dikembalikan.
  • Microsoft.AspNetCore.SystemWebAdapters.ISessionState: Ini menjelaskan status objek sesi. Ini digunakan sebagai dukungan dari jenis .HttpSessionState

Serialisasi

Karena adaptor menyediakan kemampuan untuk bekerja dengan status sesi yang ditik dengan kuat, kita harus dapat menserialisasikan dan mendeserialisasi jenis. Ini disesuaikan melalui Microsoft.AspNetCore.SystemWebAdapters.SessionState.Serialization.ISessionKeySerializer.

Implementasi JSON default disediakan yang dikonfigurasi melalui JsonSessionSerializerOptions:

  • RegisterKey<T>(string) - Mendaftarkan kunci sesi ke jenis yang diketahui. Ini diperlukan untuk menserialisasikan/mendeserialisasi status sesi dengan benar. Jika kunci ditemukan bahwa tidak ada pendaftaran untuk, kesalahan akan dilemparkan dan sesi tidak akan tersedia.
builder.Services.AddSystemWebAdapters()
    .AddJsonSessionSerializer(options =>
    {
        // Serialization/deserialization requires each session key to be registered to a type
        options.RegisterKey<int>("test-value");
    });

Implementasi

Ada dua implementasi yang tersedia dari objek status sesi yang saat ini dikirim, masing-masing dengan beberapa trade off fitur. Pilihan terbaik untuk aplikasi mungkin bergantung pada bagian migrasi mana aplikasi tersebut berada, dan dapat berubah dari waktu ke waktu.

  • Sangat diketik: Menyediakan kemampuan untuk mengakses objek dan dapat ditransmisikan ke jenis yang diharapkan
  • Penguncian: Memastikan beberapa permintaan dalam satu sesi diantrekan dan tidak mengakses sesi secara bersamaan
  • Mandiri: Gunakan saat Anda tidak berbagi sesi antara ASP.NET Framework dan ASP.NET Core untuk menghindari pengubahan kode di pustaka kelas yang mereferensikan SessionState

Di bawah ini adalah implementasi yang tersedia:

implementasi Sangat ditik Penguncian Mandiri
Aplikasi jarak jauh ✔️ ✔️
Dibungkus ASP.NET Core ✔️ ✔️