Поделиться через


Состояние сеанса удаленного приложения

Состояние сеанса удаленного приложения позволит обеспечить связь между ASP.NET Core и приложением ASP.NET для получения состояния сеанса. Это включено путем предоставления конечной точки в приложении ASP.NET, которое можно запросить для получения и задания состояния сеанса.

Сериализация HttpSessionState

Объект HttpSessionState должен быть сериализован для включения состояния сеанса удаленного приложения. Это достигается путем реализации типа Microsoft.AspNetCore.SystemWebAdapters.SessionState.Serialization.ISessionSerializer, из которого предоставляется реализация двоичного модуля записи по умолчанию. Это добавляется следующим кодом:

builder.Services.AddSystemWebAdapters()
    .AddSessionSerializer(options =>
    {
        // Customize session serialization here
    });

Настройка

Сначала следуйте инструкциям по настройке удаленного приложения, чтобы подключить приложения ASP.NET Core и ASP.NET. Затем есть несколько дополнительных методов расширения для вызова для включения состояния сеанса удаленного приложения.

Конфигурация для ASP.NET Core включает вызов AddRemoteAppSession и AddJsonSessionSerializer регистрацию известных типов элементов сеанса. Код должен выглядеть примерно так:

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();

Поддержка сеансов требует дополнительной работы для конвейера ASP.NET Core и не включена по умолчанию. Его можно настроить на основе каждого маршрута с помощью ASP.NET метаданных Core.

Например, для поддержки сеансов требуется либо аннотировать контроллер:

[Session]
public class SomeController : Controller
{
}

или включить для всех конечных точек по умолчанию:

app.MapDefaultControllerRoute()
    .RequireSystemWebAdapterSession();

Эквивалент платформы будет выглядеть следующим образом 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();

Протокол

Только чтение

Сеанс readonly извлекает состояние сеанса из приложения платформы без какой-либо блокировки. Это состоит из одного GET запроса, который вернет состояние сеанса и может быть немедленно закрыт.

Readonly session will retrieve the session state from the framework app

С возможностью записи

Протокол состояния сеанса записи начинается с того же, что и для чтения, но отличается следующим образом:

  • Требуется дополнительный PUT запрос на обновление состояния
  • Первоначальный GET запрос должен оставаться открытым до завершения сеанса. Если сеанс закрыт, сеанс не сможет обновляться.

Writeable session state protocol starts with the same as the readonly