共用方式為


遠端應用程式工作階段狀態

遠端應用程式工作階段狀態會啟用 ASP.NET Core 與 ASP.NET 應用程式之間的通訊,以擷取工作階段狀態。 這可藉由公開 ASP.NET 應用程式上的端點來啟用,該端點可查詢以擷取並設定工作階段狀態。

HttpSessionState 序列化

HttpSessionState 物件必須序列化,才能啟用遠端應用程式工作階段狀態。 這是透過類型 Microsoft.AspNetCore.SystemWebAdapters.SessionState.Serialization.ISessionSerializer 的實作來完成,其中提供了預設的二進位寫入器實作。 這是由下列程式碼新增:

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

組態

首先,請遵循遠端應用程式設定指示來連線 ASP.NET Core 和 ASP.NET 應用程式。 然後,只需要呼叫幾個額外的擴充方法,即可啟用遠端應用程式工作階段狀態。

ASP.NET Core 的設定牽涉到呼叫 AddRemoteAppSessionAddJsonSessionSerializer 來註冊已知的工作階段項目類型。 程式碼看起來應該如下所示:

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

工作階段支援需要 ASP.NET Core 管線的額外工作,而且預設不會開啟。 您可以透過 ASP.NET Core 中繼資料,根據每個路由設定它。

例如,工作階段支援需要標註控制器:

[Session]
public class SomeController : Controller
{
}

或預設為啟用所有端點:

app.MapDefaultControllerRoute()
    .RequireSystemWebAdapterSession();

架構對等項目看起來會像 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();

通訊協定

唯讀

唯讀工作階段會從架構應用程式擷取工作階段狀態,而不會有任何鎖定。 這包含將傳回工作階段狀態且可立即關閉的單一 GET 要求。

Readonly session will retrieve the session state from the framework app

可寫入

可寫入的工作階段狀態通訊協定開頭與唯讀相同,但在下列部分有所不同:

  • 需要額外的 PUT 要求來更新狀態
  • 初始 GET 要求必須保持開啟,直到工作階段完成;如果關閉,工作階段將無法更新

Writeable session state protocol starts with the same as the readonly