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