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.
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