2017-11-06 13 views
0

Angular 2とTypeScriptでSignalRを使用しようとしています。それは私のクライアント側のコードが動作していないようです、特に接続を確立しました(生成されたプロキシはありません)ネゴシエーションリクエスト中のAngular SignalRエラー

私はAngular 2 TypeScript using SignalRに従っていますが、私は自動生成されたプロキシを使用しないようにSignalR /私のために作成された自動生成されたプロキシクラスを見てください。また、Javascriptの

私たちは、Windows認証とVisual Studio 2015を使用して、Windows 7の、IIS Expressの

を使用して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は、" 私はより多くの問題をはじめた、最新かつ にtypescriptですアップデートを導入したので、私これはただのタイピング のみ

コンソールでのために私はレスポンスコを参照してください格下げde要求されたURLのためのde http://localhost:58965/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22serverrefreshhub%22%7D%5D&_=1509976299819

答えて

1

SignalRはプロキシクラスを生成しません。

あなただけMapSignalRを(使用して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属性を追加します。hubConnectionを宣言するとき

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

は、あなたのhubConnectionのURLを指定することを忘れないでください。また、プロキシの作成時にhubNameを指定します。

this.connection = $.hubConnection(); 
this.connection.url = "http://localhost:58965/signalr"; 
this.proxy = this.connection.createHubProxy('ServerRefreshHub'); 
関連する問題