我正在尝试跟踪连接到我的集线器的用户。我尝试这样做的方法是为我的集线器创建自定义授权属性,并检查尝试连接的用户。如果用户已经连接,则集线器不会授权连接
public class SingleHubConnectionPerUserAttribute : Microsoft.AspNet.SignalR.AuthorizeAttribute
{
private static readonly HashSet<UserKey> connections = new HashSet<UserKey>();
public override bool AuthorizeHubConnection(HubDescriptor hubDescriptor, IRequest request)
{
Type hubType = hubDescriptor.HubType;
string userId = request.User.Identity.GetUserId();
UserKey userKey = new UserKey(hubType, userId);
if (connections.Contains(userKey) || !base.AuthorizeHubConnection(hubDescriptor, request))
{
return false;
}
connections.Add(userKey);
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
如果每个连接只调用一次 AuthorizeHubConnection 方法,这将工作正常,但事实并非如此。
当我加载尝试与集线器连接的页面时,AuthorizeHubConnection 奇怪地运行了多次,并且它运行的次数并不总是相同,有时是 5,有些是 3,我真的不知道可能是什么造成它。
您知道什么会导致 AuthorizeHubConnection 被多次调用吗?