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

时间:2016-09-14 07:12:48

标签: iis asp.net-core asp.net-core-mvc load-balancing kestrel-http-server

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

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

但是,IIS可以提供​​粘性会话,即来自一个会话的所有请求都被路由到同一个Kestrel,因此内存中的Sessions应该没关系吗?

1 个答案:

答案 0 :(得分:1)

如果要部署到单台计算机上,使用内存中会话就可以了,如果测试站点位于单台计算机上就可以了。

如果要在Web场等部署,内存中的会话将无法运行,您需要找到分布式会话存储的解决方案。 如果是这种情况,您也可以实现这一点并进行类似的测试。

这篇文章向您展示了如何设置内存中的会话: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