SignalR: как отправлять данные в IConnected.Connect()

Я реализую метод Connect() на интерфейсе IConnected, чтобы добавлять новые соединения в правильные группы. Это работает хорошо, за исключением одного: чтобы добавить пользователя в правильную группу, мне нужно отправить значение для чтения в этом методе. Я попытался добавить свойство в клиентский концентратор:

var uIHub = $.connection.uIHub;
uIHub.SessionType = "Edit";

Но он недоступен из метода Connect:

if (string.IsNullOrEmpty(Caller.SessionType) || Caller.SessionType == "Edit") {
     sessionId = WAFContext.EditSession.SessionId.ToString();                
} else {
     sessionId = WAFContext.ViewSession.SessionId.ToString();
}
Groups.Add(Context.ConnectionId, sessionId);

Caller.SessionType всегда равно нулю.

Любые предложения о том, как решить эту проблему?


person Vidar Langberget    schedule 18.09.2012    source источник


Ответы (1)


Я решил эту проблему, добавив свою информацию в строку запроса, которая доступна в методе IConnected.Connect().

В клиенте .NET вы передаете строку запроса в свой HubConnection:

var connection = new HubConnection("http://localhost:8080/", "myInfo=12345");

В клиенте JS вы устанавливаете свойство qs перед запуском соединения:

$.connection.hub.qs = "myInfo=12345";

Затем вы можете получить доступ к этой информации на сервере в методе Connect():

var myInfo = Context.QueryString["myInfo"];
Groups.Add(Context.ConnectionId, myInfo);
person Alexander Köplinger    schedule 18.09.2012
comment
Вы знаете, как сделать то же самое с клиентом javascript? Я пробовал следующее, но это не работает: var connection = $.connection(localhost:61806 , sessionType= посещение); вар uIHub = соединение.uIHub; - person Vidar Langberget; 18.09.2012
comment
Это должно работать: $.connection.hub.qs = "myInfo=12345"; $.connection.hub.start(); - person Alexander Köplinger; 18.09.2012
comment
@akoeplinger безопасно ли передавать параметры идентификатора пользователя и имени пользователя таким образом? Может ли вызвать какие-либо проблемы с безопасностью? - person Freshblood; 09.12.2013
comment
@freshblood Это ничем не отличается от проблем безопасности, которые возникли бы у вас, если бы вы передавали его через форму на странице; если вы не делаете это за https, то у вас огромная дыра в безопасности. - person casperOne; 12.12.2013
comment
Я использовал предложенный вами подход для передачи данных, когда я использую IE, он не передается с Unicode, и вот что я получаю на сервере: ������. Есть идеи, как это решить? - person Akbari; 10.03.2016
comment
Получает ли Reconnect также данные из QueryString? - person Sellorio; 30.07.2017