Compartilhar via


Estado de sessão de aplicativo remoto

O estado da sessão do aplicativo remoto permitirá a comunicação entre o ASP.NET Core e o aplicativo ASP.NET para recuperar o estado da sessão. Isso é habilitado expondo um ponto de extremidade no aplicativo ASP.NET que pode ser consultado para recuperar e definir o estado da sessão.

Serialização HttpSessionState

O objeto HttpSessionState deve ser serializado para que o estado de sessão do aplicativo remoto seja habilitado. Isso é feito por meio da implementação do tipo Microsoft.AspNetCore.SystemWebAdapters.SessionState.Serialization.ISessionSerializer, do qual é fornecida uma implementação padrão do gravador binário. Isso é adicionado pelo seguinte código:

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

Configuração

Primeiro, siga as instruções da configuração remota de aplicativo para conectar os aplicativos ASP.NET Core e ASP.NET. Depois, há apenas alguns métodos de extensão adicionais a serem chamados para habilitar o estado da sessão do aplicativo remoto.

A configuração para ASP.NET Core envolve chamar AddRemoteAppSession e AddJsonSessionSerializer para registrar tipos de item de sessão conhecidos. A aparência do código deve ser semelhante ao seguinte:

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

O suporte à sessão requer trabalho adicional para o pipeline do ASP.NET Core e não está ativado por padrão. Ele pode ser configurado em uma base por rota por meio de metadados do ASP.NET Core.

Por exemplo, o suporte à sessão requer a anotação de um controlador:

[Session]
public class SomeController : Controller
{
}

ou a habilitação para todos os pontos de extremidade por padrão:

app.MapDefaultControllerRoute()
    .RequireSystemWebAdapterSession();

O equivalente da estrutura seria semelhante à seguinte alteração em 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();

Protocolo

Readonly

A sessão somente leitura recuperará o estado da sessão do aplicativo de estrutura sem nenhum tipo de bloqueio. Isso consiste em uma única solicitação GET que retornará um estado de sessão e poderá ser fechada imediatamente.

Readonly session will retrieve the session state from the framework app

Gravável

O protocolo de estado de sessão gravável começa com o mesmo que o somente leitura, mas difere no seguinte:

  • Requer uma solicitação adicional PUT para atualizar o estado
  • A solicitação inicial GET deve ser mantida aberta até que a sessão seja concluída; se fechada, a sessão não poderá ser atualizada

Writeable session state protocol starts with the same as the readonly