SignalR Authorize 被多次调用
SignalR Authorize is being called multiple times
我正在尝试跟踪连接到我的集线器的用户。
我尝试这样做的方法是为我的集线器创建自定义授权属性,并检查尝试连接的用户。如果用户已经连接,则集线器不会授权连接
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;
}
}
如果每个连接只调用一次 AuthorizeHubConnection 方法,这会很好地工作,但事实并非如此。
当我加载尝试与集线器连接的页面时,AuthorizeHubConnection 奇怪地运行了多次,并且运行的次数并不总是相同,有时是 5 次,有时是 3 次,我真的不知道可能是什么原因造成的。
您知道什么会导致多次调用 AuthorizeHubConnection 吗?
每次 SignalR 服务器在执行任何其他操作之前收到 HTTP 请求时都会调用授权(请参阅:https://github.com/SignalR/SignalR/blob/dev/src/Microsoft.AspNet.SignalR.Core/PersistentConnection.cs#L161)。虽然 SignalR 维护逻辑上持久的连接,但它会在幕后发出多个 HTTP 请求。当使用 Websockets 传输时,您通常会在启动连接时看到其中的 3 个(用于协商、连接和启动请求),并且每次重新连接时一个。 longPolling 和 serverSentEvents transport 每次都创建一个 HTTP 请求来发送数据(send)。另外 longPolling 创建一个轮询 HTTP 请求来接收数据 (poll)。这些请求中的每一个都必须经过授权,因此这就是为什么您会看到多次调用 AuthorizeHubConnection 方法的原因。
我正在尝试跟踪连接到我的集线器的用户。 我尝试这样做的方法是为我的集线器创建自定义授权属性,并检查尝试连接的用户。如果用户已经连接,则集线器不会授权连接
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;
}
}
如果每个连接只调用一次 AuthorizeHubConnection 方法,这会很好地工作,但事实并非如此。
当我加载尝试与集线器连接的页面时,AuthorizeHubConnection 奇怪地运行了多次,并且运行的次数并不总是相同,有时是 5 次,有时是 3 次,我真的不知道可能是什么原因造成的。
您知道什么会导致多次调用 AuthorizeHubConnection 吗?
每次 SignalR 服务器在执行任何其他操作之前收到 HTTP 请求时都会调用授权(请参阅:https://github.com/SignalR/SignalR/blob/dev/src/Microsoft.AspNet.SignalR.Core/PersistentConnection.cs#L161)。虽然 SignalR 维护逻辑上持久的连接,但它会在幕后发出多个 HTTP 请求。当使用 Websockets 传输时,您通常会在启动连接时看到其中的 3 个(用于协商、连接和启动请求),并且每次重新连接时一个。 longPolling 和 serverSentEvents transport 每次都创建一个 HTTP 请求来发送数据(send)。另外 longPolling 创建一个轮询 HTTP 请求来接收数据 (poll)。这些请求中的每一个都必须经过授权,因此这就是为什么您会看到多次调用 AuthorizeHubConnection 方法的原因。