2017-11-14 3 views
0

ITransientDependency을 구현하는 클래스에서 UserIdAbpSession으로 가져올 수 없습니다.AbreSession에서 SignalR 허브의 사용자 ID 가져 오기

public class Chat : Hub, ITransientDependency 
{ 
    public IAbpSession AbpSession { get; set; } 

    public ILogger Logger { get; set; } 

    public Chat() 
    { 
     AbpSession = NullAbpSession.Instance; 
     Logger = NullLogger.Instance; 
    } 

    private static List<MemberDto> _members = new List<MemberDto>(); 

    public Task Send(string message) 
    { 
     return Clients.All.InvokeAsync("Send", string.Format("User {0}: {1}", UserId(), message)); 
    } 

    public long? UserId() 
    { 
     return AbpSession.UserId; 
    } 
} 

속성 UserIdTenantId은 여전히 ​​null 있습니다.

Chat 클래스는 AbpSession이 잘 작동하는 "응용 프로그램"레이어 안에 있습니다.

+0

안녕하세요 아론 : 나는 SignalR .NET의 핵심 알파 2, 그래서 시작의 코드를 사용하고있어이 하나입니다 app.UseSignalR (경로 => { routes.MapHub ("API/채팅"); }); –

+0

문제는 "채팅"의 주입과 관련이 없습니다. 문제는 다음과 같습니다. https://github.com/aspnetboilerplate/aspnetboilerplate/issues/2623과 같은 SignalR의 일부 승인.하지만 SignalR .NET 코어에 적응해야합니다. Alpha –

+0

@aaron, 물론이 질문을 게시하기 전에이 질문을 이미 시도했습니다. 나는 그것을 포기했다. 나는 당신이 signalR과 auth를 사용하지 않으면 작동하지 않을 것이라고 생각한다. 그래서 저는 허브를 사용하기 전에 컨트롤러의 방법을 사용하고 있습니다. 그리고 그것은 제 경우에 맞게 조정되었습니다. –

답변

1

SignalR AspNetCore Integration과 호환됩니다.

public async Task SendMessage(string message) 
{ 
    await Clients.All.InvokeAsync("getMessage", string.Format("User {0}: {1}", AbpSession.UserId, message)); 
} 

당신 지금 downloadv3.4.1Abp.AspNetCore.SignalR 미리보기 템플릿을 할 수 있습니다 나는 here을 시도했다. SignalRAspNetCoreHelper.ts에서 수행으로

업데이트

당신은 아마 encryptedAuthToken 전달하지 않을 :

var encryptedAuthToken = new UtilsService().getCookieValue(AppConsts.authorization.encrptedAuthTokenName); 
var qs = AppConsts.authorization.encrptedAuthTokenName + "=" + encodeURIComponent(encryptedAuthToken); 

이 그런 다음 SignalR 허브의 URL에서 쿼리 문자열로 전달합니다.

1

나는 문제가 당신이 사용하는 속성 주입과 관련이있을 수 있다고 생각합니다 : SignalR은 DI를 사용하지만

public IAbpSession AbpSession { get; set; } 

, 그것은 DI 컨테이너에서 채팅 클래스를 작성하지 않습니다. 그것은 속성 주입이 작동하지 않는다는 것을 의미합니다. 그러나 생성자 주입은 DI 컨테이너의 ctor 매개 변수를 전달하므로 제대로 작동합니다.

따라서 속성 주입 대신 생성자 주입을 사용하십시오.

+0

분사가 작동하지만 TenantId, UserId가 여전히 null입니다. 전에 허브를 호출하기 위해 컨트롤러를 사용하고 있습니다. –

관련 문제