Bagikan melalui


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.

Readonly session will retrieve the session state from the framework app

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

Writeable session state protocol starts with the same as the readonly