2015-02-12 1 views
5

У меня есть вопрос в моем методе Caller метода SignalR. В методе хаба мы можем вызвать функцию клиентской стороны следующим образом., вызывающий метод Caller в концентраторе SignalR вне контекста концентратора

Clients.Caller.addContosoChatMessageToPage(name, message); 

но когда я использую для вызова его из контекста концентратора, он не найден или не реализован? как это ..

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); 
context.Clients.Caller.reportProgress(recordCount,totalCount); 

Может кто-нибудь просветить меня в этой части или есть другой способ реализовать .. теперь я использую для реализации этого

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); 
context.Clients.User(CurrentUser.Usernm).reportProgress(recordCount,totalCount); 

но теперь мы не претендуем на основе аутентификации, так что это будет проблемой, если зарегистрирован тот же usernm.

ответ

5

Вне концентратора, очевидно, нет вызывающего абонента, потому что сервер является инициатором.

Если вы беспокоитесь о уникальных именах пользователей, вам необходимо указать implement a custom IUserIdProvider, или вам нужно будет manage connection ids per user каким-либо другим способом. Тогда вы можете позвонить по телефону

context.Clients.Client(connectionId).reportProgress(); 

который будет уникальным.

+0

сопоставление идентификатора пользователя с аутентификацией хаба - я думаю, что лучший способ, но мы внедрили пользовательский Iprincipal. Собираюсь заглянуть на ссылки .. –

+0

решить мою проблему .. Yep IUserIdProvider карта с моим Iprincipal решает сопоставление соединений –