在集线器上下文之外调用 SignalR 集线器中的 Caller 方法
calling the Caller method in SignalR hub outside the hub context
我对 SignalR 的 Caller 方法有疑问。在集线器方法中,我们可以像这样调用客户端函数。
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);
但现在我们不是基于声明的身份验证,因此如果登录了相同的用户名就会出现问题..
在集线器之外,显然没有调用者,因为服务器是发起者。
如果您担心用户名的唯一性,则需要 implement a custom IUserIdProvider
, or you need to manage connection ids per user 以其他方式解决。然后你可以打电话
context.Clients.Client(connectionId).reportProgress();
这将是独一无二的。
我对 SignalR 的 Caller 方法有疑问。在集线器方法中,我们可以像这样调用客户端函数。
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);
但现在我们不是基于声明的身份验证,因此如果登录了相同的用户名就会出现问题..
在集线器之外,显然没有调用者,因为服务器是发起者。
如果您担心用户名的唯一性,则需要 implement a custom IUserIdProvider
, or you need to manage connection ids per user 以其他方式解决。然后你可以打电话
context.Clients.Client(connectionId).reportProgress();
这将是独一无二的。