2013-11-15 4 views
1

허브 외부에서 현재 signalR 요청 사용자를 얻는 방법이 있습니까? 허브 메소드 내부에 Hub.Context.User를 사용할 수 있지만 허브 메소드가 다른 기본 레이어를 호출하면 어떻게됩니까? Wcf 서비스 호출 - 추가 BehaviorExtensionElement는 현재 사용자 ID 이름과 함께 wcf 메시지 헤더를 추가하는 데 사용됩니다.허브 외부의 SignalR 사용자 (Hub.Context)를 가져와

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를 사용하여 쿠키에서 정보를 얻을 수 있습니까?

답변

0

아니요. 허브 외부에서 현재 활성 사용자를 검색하는 유일한 방법은 허브에서 호출하는 모든 방법으로 사용자 정보를 전달하는 것입니다.

일반적인 패턴은 사용자를 OnConnected의 사전에 추가하고 OnDisconnected에서 제거하여 사용자를 추적하는 것입니다. 그런 다음 사용자와 관련된 필수 정보를 보유하면서 사용자를 식별 할 수있는 완전히 다른 방법을 사용할 수 있습니다.

+1

답장을 보내 주셔서 감사합니다.하지만 사용자 저장소 (사전)는 해결하려는 문제가 아니며 지금은 couchbase에 사용자를 저장합니다. 괜찮습니다. 허브가 만든 API 요청에 인증 정보를 추가하고 싶습니다. 따라서 유일한 방법은 사용자 정보를 직접 전달하는 것입니다. 어쨌든 쿠키는 적어도 의지 할 수 있습니까? – lavrik