Why is HTTPContext.Current.Session null using Sign

2019-06-20 15:23发布

问题:

I'm attempting to migrate our ASP.Net MVC application from using Signal R1.x tgo SignalR 2.x. I just found issue which will certainly cause us problems in our quest to move forward.

Our web application is MVC based and makes heavy use of the HttpContext.Current.Session variable. When running with SignalR 1.x, everything is fine and dandy with Session.

When we upgraded to SignalR 2.x, Session was suddenly null.

I did a little googling and found the following links regarding the issue: HTTPContext.Current.Session is nul in SignalR...need alternate to Session state while using SignalR

Further investigation revealed the following tidbit of information: 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.

I would imagine that this will break a great many ASP .Net MVC based applications. Is there any workaround for this?

Is this truly by design, or is it a result of using oWin::>Startup::Configuration(){app.MapSignalR();} to initiate signalR in 2.x?

If possible, I’d like to figure this out and if the solution is not so painful, they will still consider moving to 2.x.

Thoughts?

回答1:

Session state is not supported from within SignalR as it interferes with the processing of simultaneous requests from the same user, and is not supported from WebSockets requests. In 2.0 the property is null because SignalR requests are handled before the session state module is initialized. This was a change from 1.0 in how SignalR is hosted inside of System.Web based ASP.NET applications (in 1.0 it used a route in the ASP.NET routes table, in 2.0 it uses the OWIN hosting module provided by Microsoft.Owin.Host.SystemWeb).

Note this only affects the use of session from within your SignalR classes (Hubs, etc.), not the rest of your application.