SignalR не использует сеанс на сервере - программирование

SignalR не использует сеанс на сервере

Когда я пытаюсь получить доступ к текущему сеансу HttpContext из HUB, он возвращает null.

Я попытался использовать интерфейс IRequiresSession, но он не сработал. Кто-нибудь может мне помочь?

4b9b3361

Ответ 1

Подключения SignalR (включая соединение, лежащее в основе всех операций концентратора для клиента) не поддерживают состояние сеанса. Вы можете включить его, если хотите, но мы настоятельно рекомендуем против него, поскольку доступ к сеансу доступа выполняет сериализацию запросов для данного клиента, что означает, что вы больше не получите преимущества от двусторонней передачи сообщений SignalR, поскольку один запрос блокирует другой, например. при длительном опросе, принимающее соединение блокирует любую попытку отправки.

Ответ 2

вы можете просто поддерживать свой собственный сеанс, например, использовать в кеше памяти, http не имеет апатрида, поэтому сервер нужен сеанс для поддержки клиентов, но веб-сокет поддерживает соединение, сервер поддерживает связь с клиентами, по умолчанию нет необходимости такие вещи, как сеанс HttpContext.

Ответ 3

Я разрешаю ту же проблему со скрытым полем следующим образом:

  • Добавлен ASP Hiddenfield на странице aspx.
  • присвоено значение сеанса при загрузке страницы (в моем случае на клиентском событии кнопки)
  • отправил значение в концентратор SignalR, используя $( "FieldID" ). val()