Как я могу использовать значение из переменной сеанса в качестве части имени группы в signalR


Привет я пытаюсь настроить signalR для распространения сообщений для веб-пользователей проблема в том, что один сайт содержит различные "области", а также "типы пользователей".

Область определяется, когда пользователь посещает сайт, передавая параметр url, который затем сохраняется в переменной сеанса, "тип пользователя" по умолчанию не регистрируется, а затем изменяется, когда пользователь входит в этот тип пользователя (возвращаемый из веб-сервиса) и сохраняется в объекте пользователя.

Моей целью было подключиться к хабу с помощью signalR, когда пользователь посещает сайт и добавляет users connectionId к имени группы, используя "идентификатор области" из сеанса и "идентификатор типа пользователя" из объекта пользователя в контексте.

Проблема, с которой я сталкиваюсь, заключается в том, что я могу получить идентификатор пользователя, но когда дело доходит до идентификатора области signalR не может получить доступ к сеансу. Я понимаю причины, по которым нельзя разрешить сеанс, доступный в signalR, но кто-нибудь знает, есть ли способ включить этот или альтернативный способ, который я могу получить доступ к области пользователей, чтобы я мог создавать эти уникальные группы.

1 2

1 ответ:

Если вы знаете область пользователей, вы можете просто вызвать функцию из клиента после подключения, чтобы добавить их в эту группу:

При загрузке страницы:

ClientScript.RegisterClientScriptBlock(this.GetType(), "areaKey", "var theAreaTheyBelongTo= '" + serverSideAreaTheyBelongTo + "'", true);

На вашем хабе:

public void SubscribeToArea(string area)
{
    Groups.Add(Context.ConnectionId, area);
}

На вашем клиенте:

$.connection.hub.start(function () {
    yourHubName.subscribeToArea(theAreaTheyBelongTo);
});