2017-11-06 8 views
0

Angular 2 및 TypeScript와 함께 SignalR을 사용하려고합니다. 내 클라이언트 측 코드가 작동하지 않는 것 같습니다. 특히 생성 된 프록시를 사용하지 않고 연결을 설정하십시오.협상 요청시 Angular SignalR 오류

나는 Angular 2 TypeScript using SignalR을 따라 갔지만, 자동 생성 프록시를 사용하지 않기 때문에 SignalR/Hubs 스크립트 경로는 포함하지 않았습니다. 나를 위해 생성 된 자동 생성 된 프록시 클래스를보십시오. 또한 내가 협상 요청 중에이 오류를

오류가 자바 스크립트

우리는 Windows 인증 및 Visual Studio 2015, 윈도우 7을 사용, IIS 익스프레스

를 사용 SignalR documentation 작성된 코드를 언급했다.

허브 클래스

public class ServerRefreshHub : Hub 
{  
    public ServerRefreshHub() 
    { 

    }   

    public override Task OnConnected() 
    { 
    //It seems hub is not connected as client code fails 
    } 

    public static void NotifyUsers() 
    { 
    IHubContext context = GlobalHost.ConnectionManager.GetHubContext<ServerRefreshHub>(); 
    context.Clients.All.MessageFromServer("Hello"); 
    } 
} 

Asp.Net WebAPI 시작

public partial class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     app.Map(
       "/signalr", 
       map => 
       { 
        var hubConfiguration = new HubConfiguration { 
            EnableDetailedErrors = true }; 
        map.RunSignalR(hubConfiguration); 
       }); 
    } 
} 

각도 코드

declare var $: any; 

@Injectable() 
export class ServerNotifier { 
    private connection: any;   
    private proxy: any; 

    constructor() { 

     this.connection = $.hubConnection(); 
     this.proxy = this.connection.createHubProxy('userCacheRefreshHub'); 
     this.proxy.on('MessageFromServer', (message: string) => 
            this.onMessageFromServer(message)); 

     this.connection.start().done((data: any) => { 
     console.log('Now connected ' + data.transport.name + ', connection ID= ' + data.id); 
     }).fail((error: any) => { 
     console.log('Could not connect ' + error); 
    }); 
    } 

    private onMessageFromServer(message: string) { 

    } 
} 

Package.Json

"@types/jquery": "2.0.47", 
"@types/signalr": "^2.2.35", 
"signalr": "^2.2.2" 

참고 :

"유형/JQuery와 @"

가 "^ 3.2.16는"최근에 타이프 라이터 업데이트를 소개하고 좀 더 문제를 받기 시작, 그래서 단지 typings 만

내가 볼 콘솔에서

200 응답 공동이 다운 그레이드 de 요청한 URL에 대해 http://localhost:58965/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22serverrefreshhub%22%7D%5D&_=1509976299819

답변

1

SignalR은 프록시 클래스를 생성하지 않습니다.

public void Configuration(IAppBuilder app) 
    { 
     var config = new HttpConfiguration(); 

     var settings = new JsonSerializerSettings(); 
     settings.ContractResolver = new SignalRContractResolver(); 
     var serializer = JsonSerializer.Create(settings); 
     GlobalHost.DependencyResolver.Register(typeof(JsonSerializer),() => serializer); 

     app.UseCors(CorsOptions.AllowAll); 
     app.MapSignalR(); 
    } 

는 허브 클래스 위 HubName 속성을 추가합니다 :

당신은 단지 SignalR이 MapSignalR()를 사용하여 구성 할 필요가

[HubName("ServerRefreshHub")] 
public class ServerRefreshHub : Hub 

잊지 마세요

이 hubConnection URL을 지정할 때 선언 hubConnection 및 프록시를 작성할 때 hubName을 지정하십시오.

this.connection = $.hubConnection(); 
this.connection.url = "http://localhost:58965/signalr"; 
this.proxy = this.connection.createHubProxy('ServerRefreshHub');