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