Wcf 获取集线器外部的信号器用户(Hub.Context)

Wcf 获取集线器外部的信号器用户(Hub.Context),wcf,signalr,signalr-hub,wcf-behaviour,Wcf,Signalr,Signalr Hub,Wcf Behaviour,有没有办法让当前信号器请求用户离开集线器?我可以在Hub方法内部使用Hub.Context.User,但如果Hub方法调用任何其他底层?Wcf服务调用-另一个BehaviorExtensionElement用于添加具有当前用户标识名的Wcf消息头 public object BeforeSendRequest(ref Message request, IClientChannel channel) { request.Headers.Add(MessageHeader.CreateHe

有没有办法让当前信号器请求用户离开集线器?我可以在Hub方法内部使用Hub.Context.User,但如果Hub方法调用任何其他底层?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;
显然,我可以将用户从hub方法传递到wcf调用,但它需要重构,才能从wcf行为转移到显式地使用用户名设置请求字段。
我还可以依靠HttpContext.Current从cookie获取信息吗?

不,您不能。在中心本身之外检索当前活动用户的唯一方法是将用户信息传递给在中心中调用的任何方法


一种常见的模式是通过将用户添加到OnConnected中的某种词典中,并在OnDisconnected中删除它们来跟踪用户。然后,您可以使用一种完全独立的方法来识别用户,同时获得与用户相关的所需信息。

谢谢您的回答,但用户存储(字典)不是我要解决的问题,我现在将用户存储在couchbase中,这没问题。我想将身份验证信息添加到hub发出的api请求中,因此唯一的方法是直接传递用户信息。不管怎样,我至少可以依靠饼干吗?