在集线器上下文之外的SignalR集线器中调用Caller方法

Edu*_*elo 5 asp.net signalr signalr-hub

我有一个关于SignalR的Caller方法的问题.在hub方法中,我们可以像这样调用客户端函数.

Clients.Caller.addContosoChatMessageToPage(name, message);
Run Code Online (Sandbox Code Playgroud)

但是当我用它从集线器上下文之外调用它时,它找不到或没有实现?像这样..

 var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
 context.Clients.Caller.reportProgress(recordCount,totalCount);
Run Code Online (Sandbox Code Playgroud)

有人可以在这部分启发我,还是有其他方法来实现它..现在我用来实现这一点

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

但现在我们不是基于声明的身份验证,因此如果记录相同的usernm将会出现问题.

Lar*_*ner 5

在集线器之外,显然没有调用者,因为服务器是启动者.

如果您担心唯一的用户名,则需要实现自定义IUserIdProvider,或者需要以其他方式管理每个用户的连接ID.然后你可以打电话

context.Clients.Client(connectionId).reportProgress();
Run Code Online (Sandbox Code Playgroud)

这将是独一无二的.