2017-02-06 9 views
1

私はAngler 2とASP.NET CoreをSignalRで操作しています。Cors with Signalr

私は以下のようにエラーがあります:

のXMLHttpRequestが http://localhost:55916/signalr//signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22event%22%7D%5D&_=1486394845411をロードすることはできません。 要求の認証モードが 'include'の場合、レスポンス の 'Access-Control-Allow-Origin'ヘッダーの値はワイルドカード '*'であってはなりません。したがって、オリジン ' http://localhost:8080'は許可されません。 XMLHttpRequestによって開始された要求の信任状モードは、withCredentials属性によって制御されます。

私のアプリの設定があります:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
     { 
      var signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration["data:secretKey"])); 

      loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
      loggerFactory.AddDebug(); 


      app.UseCors(config => 
       config.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin()); 

      app.UseWebSockets(); 
      app.UseSignalR("/signalr"); 

      app.UseMvc(); 
     } 

私も角度2 SignalRサービス魔女サーバイベントregiestering

constructor(){ 
//setups... 

    this.connection = $.hubConnection(this.baseUrl + 'signalr/'); 
    this.proxy = this.connection.createHubProxy(this.proxyName); 

    this.registerOnServerEvents(); 

    this.startConnection(); 
} 

あります

private registerOnServerEvents(): void { 
     this.proxy.on('FoodAdded', (data: any) => { 
      debugger; 
      this.foodchanged.emit(data); 
     }); 

     this.proxy.on('FoodDeleted', (data: any) => { 
      debugger; 
      this.foodchanged.emit('this could be data'); 
     }); 

     this.proxy.on('FoodUpdated', (data: any) => { 
      debugger; 
      this.foodchanged.emit('this could be data'); 
     }); 

     this.proxy.on('SendMessage', (data: ChatMessage) => { 
      debugger; 
      console.log('received in SignalRService: ' + JSON.stringify(data)); 
      this.messageReceived.emit(data); 
     }); 

     this.proxy.on('newCpuValue', (data: number) => { 
      debugger; 
      this.newCpuValue.emit(data); 
     }); 
    } 

エラーがで始まるをかわいい。

+0

あなたは、この問題を解決しましたか?私もそれと戦っている:( – wh1sp3r

+0

ああ私はそれは私に数分を与える投稿しました:) – miechooy

答えて

3

を追加しました。クライアント側の接続を設定している間、私は偽

withCredentials

プロパティを追加する必要がありましたので、コードは次のようになります。

private startConnection(): void { 
    this.connection.start({ withCredentials: false }).done((data: any) => { 
     this.connectionEstablished.emit(true); 
     this.connectionExists = true; 
    }).fail((error: any) => this.connectionEstablished.emit(false)); 
} 
+0

これは痛みの巨大なソースだったと痛いほどMSのドキュメントで逃した。 connection.start()のすべてのオーバーロードをMicrosoftが概説しているところを見つけましたか?非常に多くの例で、彼らはCORSのすべての "*"起源を認め、それをそのままにしています。これは具体的な問題ではありませんが、XMLHttpRequestを使用することになります。 – Matthew

0

限り、資格情報のセキュリティを使用すると、要求がサーバーに来るかもしれないCORSするドメイン(複数可)を指定する必要があり、アプリケーションで使用されているよう:あなたができるようにしている場合、資格情報のセキュリティの

app.UseCors(config => config.WithOrigins("http://localhost:8080")); 

値が大幅に削減されます世界のあらゆるドメインからのCORS要求それが私たちに伝えるエラーメッセージです。

0

これは私のため

app.UseCors(config => config.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().AllowCredentials()); 

を働いていたが、私はそれを考え出したAllowCredentialsオプション