Status sesi aplikasi jarak jauh
Status sesi aplikasi jarak jauh akan memungkinkan komunikasi antara ASP.NET Core dan aplikasi ASP.NET untuk mengambil status sesi. Ini diaktifkan dengan mengekspos titik akhir pada aplikasi ASP.NET yang dapat dikueri untuk mengambil dan mengatur status sesi.
Serialisasi HttpSessionState
Objek HttpSessionState harus diserialisasikan agar status sesi aplikasi jarak jauh diaktifkan. Ini dicapai melalui implementasi jenis Microsoft.AspNetCore.SystemWebAdapters.SessionState.Serialization.ISessionSerializer
, di mana implementasi penulis biner default disediakan. Ini ditambahkan oleh kode berikut:
builder.Services.AddSystemWebAdapters()
.AddSessionSerializer(options =>
{
// Customize session serialization here
});
Konfigurasi
Pertama, ikuti instruksi penyiapan aplikasi jarak jauh untuk menyambungkan aplikasi ASP.NET Core dan ASP.NET. Kemudian, hanya ada beberapa metode ekstensi tambahan untuk dipanggil untuk mengaktifkan status sesi aplikasi jarak jauh.
Konfigurasi untuk ASP.NET Core melibatkan panggilan AddRemoteAppSession
dan AddJsonSessionSerializer
untuk mendaftarkan jenis item sesi yang diketahui. Kode akan terlihat mirip dengan yang berikut:
builder.Services.AddSystemWebAdapters()
.AddJsonSessionSerializer(options =>
{
// Serialization/deserialization requires each session key to be registered to a type
options.RegisterKey<int>("test-value");
options.RegisterKey<SessionDemoModel>("SampleSessionItem");
})
.AddRemoteAppClient(options =>
{
// Provide the URL for the remote app that has enabled session querying
options.RemoteAppUrl = new(builder.Configuration["ReverseProxy:Clusters:fallbackCluster:Destinations:fallbackApp:Address"]);
// Provide a strong API key that will be used to authenticate the request on the remote app for querying the session
options.ApiKey = builder.Configuration["RemoteAppApiKey"];
})
.AddSessionClient();
Dukungan sesi memerlukan pekerjaan tambahan untuk alur ASP.NET Core, dan tidak diaktifkan secara default. Ini dapat dikonfigurasi berdasarkan per rute melalui metadata ASP.NET Core.
Misalnya, dukungan sesi memerlukan baik untuk membuat anotasi pengontrol:
[Session]
public class SomeController : Controller
{
}
atau untuk mengaktifkan semua titik akhir secara default:
app.MapDefaultControllerRoute()
.RequireSystemWebAdapterSession();
Kerangka kerja yang setara akan terlihat seperti perubahan berikut dalam Global.asax.cs
:
SystemWebAdapterConfiguration.AddSystemWebAdapters(this)
.AddJsonSessionSerializer(options =>
{
// Serialization/deserialization requires each session key to be registered to a type
options.RegisterKey<int>("test-value");
options.RegisterKey<SessionDemoModel>("SampleSessionItem");
})
// Provide a strong API key that will be used to authenticate the request on the remote app for querying the session
// ApiKey is a string representing a GUID
.AddRemoteAppServer(options => options.ApiKey = ConfigurationManager.AppSettings["RemoteAppApiKey"])
.AddSessionServer();
Protokol
Hanya baca
Sesi readonly akan mengambil status sesi dari aplikasi kerangka kerja tanpa penguncian apa pun. Ini terdiri dari satu GET
permintaan yang akan mengembalikan status sesi dan dapat segera ditutup.
Dapat ditulis
Protokol status sesi yang dapat ditulis dimulai dengan yang sama dengan readonly, tetapi berbeda dalam hal berikut:
- Memerlukan permintaan tambahan
PUT
untuk memperbarui status - Permintaan awal
GET
harus tetap terbuka sampai sesi selesai; jika ditutup, sesi tidak akan dapat diperbarui
ASP.NET Core