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