有没有办法在集线器之外获取当前的 signalR 请求用户?我可以在集线器方法中使用 Hub.Context.User,但是如果集线器方法调用任何其他底层?Wcf 服务调用 - 一个额外的 BehaviorExtensionElement 用于添加带有当前用户身份名称的 wcf 消息头。
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
request.Headers.Add(MessageHeader.CreateHeader(
Constants.HeaderNames.SessionId,
Constants.HeaderNames.HeaderNamespace,
_hubManager.ResolveHub(Constants.Hubs.MessengerHub).
Context.User.Identity.Name));
}
是的,我发现 DefaultHubManager 获取了集线器,但我不确定它将是当前请求的集线器,而不是并发请求或新请求集线器,因为在 ResolveHub 结束时,我看到以下代码运行
return (DependencyResolverExtensions.Resolve(this._resolver, descriptor.HubType)
?? Activator.CreateInstance(descriptor.HubType)) as IHub;
Obviuosly 我可以将用户从集线器方法传递到 wcf 调用,但它需要重构以从 wcf 行为移动到使用用户名显式设置请求字段。我也可以依靠 HttpContext.Current 从 cookie 中获取信息吗?