Stato sessione app remota

Lo stato sessione dell'app remota consentirà la comunicazione tra l'app ASP.NET Core e ASP.NET per recuperare lo stato della sessione. Questa opzione è abilitata esponendo un endpoint nell'app ASP.NET su cui è possibile eseguire query per recuperare e impostare lo stato della sessione.

Serializzazione HttpSessionState

L'oggetto HttpSessionState deve essere serializzato per abilitare lo stato della sessione dell'app remota. Questa operazione viene eseguita tramite l'implementazione del tipo Microsoft.AspNetCore.SystemWebAdapters.SessionState.Serialization.ISessionSerializer, di cui viene fornita un'implementazione predefinita del writer binario. Viene aggiunto dal codice seguente:

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

Impostazione

Prima di tutto, seguire le istruzioni di configurazione dell'app remota per connettere le app ASP.NET Core e ASP.NET. Esistono quindi solo un paio di metodi di estensione aggiuntivi da chiamare per abilitare lo stato della sessione dell'app remota.

La configurazione per ASP.NET Core prevede la chiamata AddRemoteAppSession e AddJsonSessionSerializer la registrazione dei tipi di elementi di sessione noti. Il codice risultante dovrebbe essere simile al seguente:

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

Il supporto della sessione richiede ulteriori operazioni per la pipeline ASP.NET Core e non è attivato per impostazione predefinita. Può essere configurato per ogni route tramite ASP.NET metadati di base.

Ad esempio, il supporto sessione richiede l'annotazione di un controller:

[Session]
public class SomeController : Controller
{
}

oppure per abilitare per tutti gli endpoint per impostazione predefinita:

app.MapDefaultControllerRoute()
    .RequireSystemWebAdapterSession();

L'equivalente del framework sarà simile alla modifica seguente in 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();

Protocollo

Sola lettura

La sessione di sola lettura recupererà lo stato della sessione dall'app framework senza alcun tipo di blocco. Si tratta di una singola GET richiesta che restituirà uno stato di sessione e che può essere chiusa immediatamente.

Readonly session will retrieve the session state from the framework app

Scrivibile

Il protocollo di stato della sessione scrivibile inizia con lo stesso valore di readonly, ma differisce nel codice seguente:

  • Richiede una richiesta aggiuntiva PUT per aggiornare lo stato
  • La richiesta iniziale GET deve essere mantenuta aperta fino al termine della sessione. Se chiusa, la sessione non sarà in grado di essere aggiornata

Writeable session state protocol starts with the same as the readonly