Есть ли обходной путь для использования System.Web HTTPContext SessionId в выпуске SignalR 2.x?

Мы пытаемся перейти с SignalR 1.x на SignalR 2.x и столкнулись с некоторыми проблемами.

Приложение использует SignalR 1.x для связи в режиме реального времени (push) между внутренним и внешним клиентами. В SignalR 1.x у нас был доступ к состоянию сеансов System.Web HttpContext. В частности, мы использовали SessionId для отслеживания и управления активными подключениями SignalR.

Сейчас мы пытаемся выполнить обновление до SignalR 2.x. К сожалению, доступ к System.Web HttpContext больше не поддерживается. Это связано с тем, что запросы SignalR обрабатываются до инициализации модуля состояния сеанса.

Теперь перед нами стоит задача придумать какой-то другой способ уникального отслеживания соединений, отличный от SessionId. Одна мысль — захватить что-то со стороны клиента и передать в наш первоначальный запрос на подписку на уведомления SignalR. Я просматривал эти файлы cookie запросов и задавался вопросом, есть ли что-то, что я мог бы там использовать.

Есть мысли по этому поводу?

Спасибо, ДжонБ


person JohnB    schedule 28.02.2014    source источник


Ответы (1)


Вместо сеансов SignalR использует подключения. Согласно веб-сайту http://asp.net/signalr, "каждый клиент, подключающийся к концентратору, передает уникальное соединение id. Вы можете получить это значение в свойстве Context.ConnectionId контекста концентратора..."

Кроме того, Context по-прежнему имеет свойство User, сохраняя идентификатор (и, следовательно, имя пользователя) пользователя (Context.User.Identity.Name).

Таким образом, вместо сеансов вы можете использовать ConnectionId для идентификации пользователей.

На этой странице приведены более подробные сведения: http://www.asp.net/signalr/overview/signalr-20/hubs-api/mapping-users-to-connections

person James Haug    schedule 28.02.2014