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