Stav relace vzdálené aplikace

Stav relace vzdálené aplikace umožní komunikaci mezi ASP.NET Core a ASP.NET aplikací, aby načetla stav relace. To je povoleno zveřejněním koncového bodu v aplikaci ASP.NET, která se dá dotazovat na načtení a nastavení stavu relace.

Serializace HttpSessionState

Objekt HttpSessionState musí být serializován, aby se povolil stav relace vzdálené aplikace. To se provádí prostřednictvím implementace typu Microsoft.AspNetCore.SystemWebAdapters.SessionState.Serialization.ISessionSerializer, z níž je poskytována výchozí binární zapisovač implementace. Toto je přidáno následujícím kódem:

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

Konfigurace

Nejprve postupujte podle pokynů pro nastavení vzdálené aplikace a připojte aplikace ASP.NET Core a ASP.NET. Poté existuje jen několik dalších metod rozšíření pro volání pro povolení stavu vzdálené relace aplikace.

Konfigurace pro ASP.NET Core zahrnuje volání AddRemoteAppSession a AddJsonSessionSerializer registraci známých typů položek relace. Kód by měl vypadat nějak takto:

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

Podpora relací vyžaduje další práci pro kanál ASP.NET Core a není ve výchozím nastavení zapnutá. Dá se nakonfigurovat pro jednotlivé trasy prostřednictvím ASP.NET základních metadat.

Podpora relací například vyžaduje, aby kontroler anotuje:

[Session]
public class SomeController : Controller
{
}

nebo povolit pro všechny koncové body ve výchozím nastavení:

app.MapDefaultControllerRoute()
    .RequireSystemWebAdapterSession();

Ekvivalent architektury by vypadal takto: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();

Protokol

Jen pro čtení

Relace jen pro čtení načte stav relace z aplikace architektury bez jakéhokoliv zamykání. Skládá se z jednoho GET požadavku, který vrátí stav relace a může být uzavřen okamžitě.

Readonly session will retrieve the session state from the framework app

Zapisovatelné

Zapisovatelný protokol stavu relace začíná stejným způsobem jako čtení, ale liší se v následujících:

  • Vyžaduje další PUT požadavek na aktualizaci stavu.
  • Počáteční GET požadavek musí být otevřený, dokud se relace nedokončí. Pokud je relace uzavřená, nebude možné ji aktualizovat.

Writeable session state protocol starts with the same as the readonly