SignalRv2 — передача значений в концентратор

Я постараюсь изо всех сил объяснить это. В моем коде Hub я создал экземпляр класса ConnectionMapping. Он был взят отсюда http://www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections#inmemory .

Для этого ConnectionMapping требуется уникальный ключ для своего словаря. У меня есть код веб-формы, называемый default.aspx.cs. В этом коде я получу уникальное имя пользователя для входа в событие Page_Load. Как передать это имя пользователя в Hub, чтобы добавить его в ConnectionMapping?

Я старался.

IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();

Но я не знаю, что я делаю после этого. Помощь.


person RStyle    schedule 22.05.2015    source источник


Ответы (1)


Короткий ответ: вы этого не сделаете. Не с кодом, который у вас есть. Проблема в этой последовательности:

  • Страница запросов клиентов
  • Выполняется серверный код (Page_Load)
  • Полученный HTML/JS отправляется клиенту
  • Клиент подключается к SignalR

На этом этапе вы, вероятно, добавите в ConnectionMapping. Проблема, конечно, в том, что любые данные/переменные в Page_Load больше не доступны, и у вас не было бы возможности сопоставить только что полученное соединение с этим запросом страницы, даже если бы они были.

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

Теперь у вас есть обе части информации одновременно, и вы можете нормально добавлять их в сопоставление.

person BradleyDotNET    schedule 22.05.2015