signalr - 为什么 HTTPContext.Current.Session 在 ASP .Net MVC 应用程序中使用 SignalR 2.x 库为空?

标签 signalr signalr-hub signalr.client

我正在尝试从使用 Signal R1.x tgo 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 中不支持 session 状态,因为它会干扰来自同一用户的同时请求的处理,并且不受 WebSockets 请求的支持。在 2.0 中,该属性为 null,因为 SignalR 请求是在初始化 session 状态模块之前处理的。这与 1.0 相比,SignalR 在基于 System.Web 的 ASP.NET 应用程序中的托管方式发生了变化(在 1.0 中,它使用 ASP.NET 路由表中的路由,在 2.0 中,它使用 Microsoft.Owin 提供的 OWIN 托管模块。主机.SystemWeb)。

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

关于signalr - 为什么 HTTPContext.Current.Session 在 ASP .Net MVC 应用程序中使用 SignalR 2.x 库为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22023544/

相关文章:

c# - 如何通过 Web API 向所有客户端广播消息

c# - 在.Net Core 类库中添加启动类

iis-7 - Windows Server 2008 上的 SignalR serverSentEvents 和 IIS 7 POST 请求需要太多时间才能完成

nlog - 如何使用 Signalr 编写 NLog 目标

javascript - 在 signalR 核心启动时设置自定义 ID

asp.net - SignalR 协商失败(网关错误)

javascript - SignalR:调用集线器方法时发生内部服务器错误

signalr - Signalr 是否更改 ConnectionId OnReconnected 方法?

c# - SignalR disconnect 在互联网断开/重新连接时未被调用