0

我想在IIS上發佈我的asp.net核心應用程序,即作爲反向代理的IIS和運行在1-n Kestrels上的Core。IIS上的ASP.NET Core粘性會話

我一直在閱讀關於會話和緩存在.net核心。對於會話,顯然建議內存中緩存僅用於開發/測試,我想這是因爲假設粘滯會話不可用。

但是,IIS可以提供​​粘性會話,即來自一個會話的所有請求都路由到相同的紅隼,因此內存中的會話應該沒問題?

回答

1

如果您正在部署到單臺計算機上,則使用內存中會話將會沒問題,並且如果測試站點在單臺計算機上,則可以。

如果您打算跨網絡農場等進行部署,則內存中會話將無法工作,您需要查找分佈式會話存儲的解決方案。 如果是這樣的話,你可以實現這個並且像like一樣測試。

這篇文章將向您介紹如何設置內存會話:https://www.exceptionnotfound.net/finding-and-using-asp-net-session-in-core-1-0/

基本設置:

public void ConfigureServices(IServiceCollection services) 
{ 
    ... 
    services.AddMemoryCache(); 
    services.AddSession(options => 
    { 
     options.IdleTimeout = TimeSpan.FromMinutes(60); 
     options.CookieName = ".MyCoreApp"; 
    }); 
    ... 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerfactory) 
{ 
    ... 
    app.UseSession(); 
    ... 
} 

然後調用的SetString和GetString:

Context.Session.SetString("UserName", "John Smith"); 
var userName = Context.Session.GetString("UserName"); 

您可以查看以下內容以在SQL Server中存儲會話。 http://www.mikesdotnetting.com/article/292/configuring-sql-server-for-session-state-in-asp-net-core-1-0-mvc

+0

謝謝馬克,很好的回答!仍然將IIS作爲反向代理部分查詢,是否可以配置爲粘性會話? – user1340582

+0

不確定你的意思嗎?會話狀態將在每個會話中可用,只要會話處於活動狀態,以便同一個客戶端調用它?你能提供更多信息嗎? –

+0

好吧,傳統上我使用粘滯會話的負載均衡器,所以他們總是將呼叫重定向到同一臺服務器。這種方式會話只能存儲在內存中,而不需要使用分佈式緩存。因此,如果IIS(我的「Kestrel的負載均衡器」)能夠支持粘性會話,那麼就不需要分佈式緩存? – user1340582