【问题标题】:Why is HTTPContext.Current.Session null using SignalR 2.x libraries in a ASP .Net MVC application?为什么 HTTPContext.Current.Session 在 ASP .Net MVC 应用程序中使用 SignalR 2.x 库为空?
【发布时间】:2014-03-28 05:28:02
【问题描述】:

我正在尝试从使用 Signal R1.x 到 SignalR 2.x 迁移我们的 ASP.Net MVC 应用程序。我刚刚发现了一些问题,这肯定会给我们在前进的过程中带来麻烦。

我们的 Web 应用程序是基于 MVC 的,并且大量使用了 HttpContext.Current.Session 变量。 使用 SignalR 1.x 运行时,使用 Session 一切都很好。

当我们升级到 SignalR 2.x 时,Session 突然为空。

我在谷歌上搜索了一下,发现了以下关于该问题的链接: HTTPContext.Current.Session is nul in SignalR...need alternate to Session state while using SignalR

进一步调查发现以下信息: http://www.asp.net/signalr/overview/signalr-20/troubleshooting-and-debugging/troubleshooting

HTTPContext.Current.Session is null
This behavior is by design. SignalR does not support the ASP.NET session state, 
since enabling the session state would break duplex messaging.

我想这会破坏很多基于 ASP .Net MVC 的应用程序。 有什么解决方法吗?

这真的是设计使然,还是使用 oWin::>Startup::Configuration(){app.MapSignalR();} 在 2.x 中启动 signalR 的结果?

如果可能,我想解决这个问题,如果解决方案不是那么痛苦,他们仍然会考虑迁移到 2.x。

想法?

【问题讨论】:

    标签: signalr signalr-hub signalr.client


    【解决方案1】:

    SignalR 不支持会话状态,因为它会干扰来自同一用户的同时请求的处理,并且不支持 WebSockets 请求。在 2.0 中,该属性为 null,因为 SignalR 请求是在初始化会话状态模块之前处理的。这与 1.0 相比,SignalR 在基于 System.Web 的 ASP.NET 应用程序中的托管方式发生了变化(在 1.0 中,它使用 ASP.NET 路由表中的路由,在 2.0 中,它使用 Microsoft.Owin 提供的 OWIN 托管模块。 Host.SystemWeb)。

    请注意,这只会影响 SignalR 类(集线器等)中会话的使用,而不影响应用程序的其余部分。

    【讨论】:

    • 如何解决这个问题
    • 安装包 2.x 版本后,它也影响了我的应用程序。会话用于记录,安装包后应用程序无法运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多