Состояние сеанса удаленного приложения
Состояние сеанса удаленного приложения позволит обеспечить связь между 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
запроса, который вернет состояние сеанса и может быть немедленно закрыт.
С возможностью записи
Протокол состояния сеанса записи начинается с того же, что и для чтения, но отличается следующим образом:
- Требуется дополнительный
PUT
запрос на обновление состояния - Первоначальный
GET
запрос должен оставаться открытым до завершения сеанса. Если сеанс закрыт, сеанс не сможет обновляться.
ASP.NET Core