Как запретить конечной точке SignalR фиксировать состояние сеанса в ASP. NET Core - PullRequest
0 голосов
/ 03 марта 2020

У меня сложная проблема. Я объясню ситуацию в деталях, чтобы вы, ребята, могли надеяться помочь мне.

  • Я использую. NET Core 3.1
  • Каждая страница веб-сайта, сразу после загрузки, устанавливает Веб-сокет SignalR на сервер.
  • Каждый раз, когда пользователь нажимает на какую-либо ссылку, отправляется запрос ajax для получения нового содержимого.
  • Существуют пошаговые формы, в которых хранятся данные сессия.

Все работает без нареканий, кроме одной вещи. Состояние сеанса будет повреждено, если пользователь перезагрузит страницу; и это из-за концентратора SignalR. Два дня я боролся за то, чтобы выяснить точный сценарий проблемы. Здесь идет речь:

  • Пользователь впервые загружает сайт в своем браузере.
  • Клиент немедленно подключается к хабу SignalR.
  • Пользователь переходит к формам (полностью ajax) и заполняет некоторые данные. Данные сохраняются в сеансе (опять же, все срабатывает по ajax).
  • Теперь, если пользователь обновляет всю страницу, это приводит к разрыву соединения SignalR. Это приведет к тому, что SessionMiddleware на концентраторе подтвердит свои данные сеанса, которые были загружены перед сохранением данных форм. Таким образом, действительное состояние сеанса переопределяется его старым состоянием!

Здесь фиксируется сеанс:

https://github.com/dotnet/aspnetcore/blob/2c4d604cebc6821a5ba8ee06667605b9e4f6e890/src/Middleware/Session/src/SessionMiddleware.cs#L117

Мне интересно, что может быть лучшим решением этой проблемы. Возможно, я мог бы как-то отключить фиксацию сеанса для конечной точки концентратора ('/ hub')?

Спасибо за ваше время.

...