【问题标题】:ASP.NET Core sticky sessions on IISIIS 上的 ASP.NET Core 粘性会话
【发布时间】:2017-01-21 21:48:47
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢马克,很好的回答!仍在查询 IIS 作为反向代理部分,是否可以将其配置为粘性会话?
    • 不确定你的意思?会话状态将在每个会话中可用,只要会话对于调用它的同一个客户端来说是活动的?你能提供更多信息吗?
    • 好吧,传统上我有使用粘性会话的负载平衡器,所以它们总是将调用重定向到同一台服务器。这种方式会话可以只存储在内存中,而不需要使用分布式缓存。因此,如果 IIS(我的 Kestrel 的“负载平衡器”)支持粘性会话,那么就不需要分布式缓存了吗?
    • 我明白了,不确定,反正我可能只是实现分布式缓存,它非常无缝,以后可能会省去麻烦。
    猜你喜欢
    • 2019-08-05
    • 2019-05-25
    • 2021-10-19
    • 2010-10-20
    • 2012-05-16
    • 2020-04-03
    • 2021-11-04
    • 2012-05-17
    相关资源
    最近更新 更多