Почему HTTPContext.Текущий.Сеанс null с использованием SignalR 2.X библиотеки в a ASP.Net приложение MVC?


Я пытаюсь перенести наш ASP.Net приложение MVC от использования сигнала R1.x TGO SignalR 2.x. я только что нашел проблему, которая, безусловно, вызовет у нас проблемы в нашем стремлении двигаться вперед.

Наше веб-приложение основано на MVC и активно использует HttpContext.Текущий.Переменная сеанса. При работе с SignalR 1.x, все в порядке и денди с сессией.

Когда мы перешли на SignalR 2.x, сеанс внезапно стал нулевым.

Я немного погуглил и нашел следующие ссылки по этому вопросу: HTTPContext.Текущий.Сеанс равен нулю в SignalR...требуется альтернативное состояние сеанса при использовании 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 ();} для инициализации signalR в 2.Икс?

Если это возможно, я хотел бы выяснить это, и если решение не так болезненно, они все равно подумают о переходе на 2.x.

Мысли?

1 5

1 ответ:

Состояние сеанса не поддерживается внутри SignalR, так как оно мешает обработке одновременных запросов от одного и того же пользователя, и не поддерживается из запросов WebSockets. В версии 2.0 свойство имеет значение null, поскольку запросы SignalR обрабатываются до инициализации модуля состояния сеанса. Это было изменение от 1.0 в том, как SignalR размещается внутри системы.Основанный на сети ASP.NET приложения (в 1.0 он использовал маршрут в ASP.NET таблица маршрутов, в 2.0 используется модуль OWIN hosting предоставлено корпорацией Майкрософт.Долг.Хозяин.SystemWeb).

Примечание это влияет только на использование сеанса из ваших классов SignalR (концентраторы и т. д.), а не остальная часть вашего заявления.