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