2016-04-14 52 views
6

Ho costruito un hub SignalR semplice che risiede in un servizio WebAPI, ho incluso tutti gli attributi CORS richiesti su WebAPI e SignalR. I miei endpoint WebAPI funzionano come previsto ma SignalR non lo è.Risposte SignalR che sovrascrivono le intestazioni

Ho provato tutto quello che riesco a trovare e tutto quello che posso trovare online, ma non funziona, ho già provato this answer e this other senza soluzione.

Il mio metodo di estensione SignalR assomiglia a questo

public static IAppBuilder UseSignalrNotificationService(this IAppBuilder app) 
    { 
     var config = new HubConfiguration(); 
     config.Resolver = new HubDependencyResolver(); 
     config.EnableDetailedErrors = true; 
     app.UseCors(CorsOptions.AllowAll); 
     app.MapSignalR(config); 

     return app; 
    } 

E ho anche provato ad aggiungere le intestazioni di risposta su tutte le richieste utilizzando il web.config, ma ho allways ottenere lo stesso errore:

XMLHttpRequest cannot load https://MyApplicationServer/notifications/signalr/negotiate?clientProtocol=1.5&access_token= &connectionData=. A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'MyOriginService' is therefore not allowed access. The credentials mode of an XMLHttpRequest is controlled by the withCredentials attribute.

risposta

13

Dopo ulteriori ricerche e manipolazione con il lato server del problema, ho eseguito il this answer e ho riscontrato che l'errore si verificava con il lato client della richiesta. in base a this GitHub issue, il parametro "withCredentials" della richiesta è sempre impostato su "true". La soluzione era quella di chiedere al cliente il metodo start come segue:

$.connection.hub.start({ withCredentials: false }).done(function() { //... } 
0

Are stai cambiando la richiesta da qualche parte con una sorta di intercettore globale? Per qualche ragione, XMLHttpRequest inizia con withCredentials:true e questo è vietato quando Access-Control-Allow-Origin è impostato su *.

Che ne dici di impostare "Controllo accesso-Autorizza origine" su "http://MyApplicationServer"? È più sicuro di * e rimuoverà il tuo problema alla fonte.

+0

Ho provato a cambiare la politica di CORS SignalR per specificare le origini a nessun risultato, qualcosa di strano sta succedendo con la richiesta e le sue intestazioni – evilpilaf