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

时间:2014-02-25 18:53:27

标签: 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.

思想?

1 个答案:

答案 0 :(得分:6)

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类(集线器等)中的会话使用,而不影响应用程序的其余部分。