Udostępnij za pośrednictwem


Stan sesji aplikacji zdalnej

Stan sesji zdalnej aplikacji umożliwi komunikację między aplikacją ASP.NET Core i ASP.NET w celu pobrania stanu sesji. Jest to włączone przez uwidacznianie punktu końcowego w aplikacji ASP.NET, do którego można wykonywać zapytania w celu pobrania i ustawienia stanu sesji.

HttpSessionState serializacji

Aby HttpSessionState można było włączyć stan sesji zdalnej aplikacji, należy serializować obiekt. Jest to realizowane za pomocą implementacji typu Microsoft.AspNetCore.SystemWebAdapters.SessionState.Serialization.ISessionSerializer, z którego jest udostępniana domyślna implementacja modułu zapisywania binarnego. Jest to dodawane przez następujący kod:

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

Konfigurowanie

Najpierw postępuj zgodnie z instrukcjami konfiguracji aplikacji zdalnej, aby połączyć aplikacje ASP.NET Core i ASP.NET. Następnie istnieje tylko kilka dodatkowych metod rozszerzenia do wywołania w celu włączenia stanu sesji aplikacji zdalnej.

Konfiguracja ASP.NET Core obejmuje wywoływanie AddRemoteAppSession i AddJsonSessionSerializer rejestrowanie znanych typów elementów sesji. Kod powinien wyglądać podobnie do następującego:

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

Obsługa sesji wymaga dodatkowej pracy dla potoku ASP.NET Core i nie jest domyślnie włączona. Można ją skonfigurować dla poszczególnych tras za pośrednictwem metadanych ASP.NET Core.

Na przykład obsługa sesji wymaga dodawania adnotacji do kontrolera:

[Session]
public class SomeController : Controller
{
}

lub domyślnie włączyć dla wszystkich punktów końcowych:

app.MapDefaultControllerRoute()
    .RequireSystemWebAdapterSession();

Odpowiednik struktury będzie wyglądać podobnie do następującej zmiany w pliku 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();

Protokół

Tylko do odczytu

Sesja odczytu pobiera stan sesji z aplikacji platformy bez blokowania. Składa się z jednego GET żądania, które zwróci stan sesji i można je natychmiast zamknąć.

Readonly session will retrieve the session state from the framework app

Z możliwością zapisu

Protokół stanu sesji z możliwością zapisu rozpoczyna się od tego samego co w trybie odczytu, ale różni się w następujących kwestiach:

  • Wymaga dodatkowego PUT żądania zaktualizowania stanu
  • GET Początkowe żądanie musi być otwarte do czasu zakończenia sesji. Jeśli sesja zostanie zamknięta, sesja nie będzie mogła zostać zaktualizowana

Writeable session state protocol starts with the same as the readonly