遠端應用程式工作階段狀態
遠端應用程式工作階段狀態會啟用 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 的設定牽涉到呼叫 AddRemoteAppSession
和 AddJsonSessionSerializer
來註冊已知的工作階段項目類型。 程式碼看起來應該如下所示:
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
要求。
可寫入
可寫入的工作階段狀態通訊協定開頭與唯讀相同,但在下列部分有所不同:
- 需要額外的
PUT
要求來更新狀態 - 初始
GET
要求必須保持開啟,直到工作階段完成;如果關閉,工作階段將無法更新