ASP.NET IIS 上的核心粘性会话

ASP.NET Core sticky sessions on IIS

我想在 IIS 上发布我的 asp.net 核心应用程序,即 IIS 作为反向代理和核心 运行 在 1-n Kestrels 上。

我一直在阅读有关 .net 核心中的会话和缓存的信息。对于会话,显然建议仅在 dev/test 中使用内存缓存,我想原因是因为假定粘性会话不可用。

但是,IIS 能否提供粘性会话,即来自一个会话的所有请求都被路由到同一个 Kestrel,因此内存中的会话对我来说应该没问题?

如果您要部署到一台机器上,使用内存会话就可以了,如果测试站点在一台机器上也可以。

如果您要跨网络场等进行部署,内存会话将不起作用,您将需要找到分布式会话存储的解决方案。 如果是这种情况,你不妨实现这个并进行类似的测试。

此 post 向您展示了如何设置内存中会话: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服务器中存储session可以看下面的。 http://www.mikesdotnetting.com/article/292/configuring-sql-server-for-session-state-in-asp-net-core-1-0-mvc