2013-03-17 8 views
7

Sto cercando di implementare il Cross-dominio chiamate con SignalR 1.0.1 con Chrome (Ver 25.0.1364.172). Come ho la mia interfaccia utente in un host (localhost: 16881) e il 'servizio' in un altro host (localhost: 16901).SignalR 1.0.1 richiesta Cross-domain (CORS) con Chrome

ho tutto a posto, come nel tema How to use cross-domain connections (CORS - Access Control Allow Origin) with SignalR

add jQuery.support.cors = true; before opening a connection 
set up $.connection.hub.url = 'http://localhost:16901/signalr';, pointing to your subdomain 

allow cross-domain requests on server side, by adding the following header description: 

<add name="Access-Control-Allow-Origin" value="http://localhost:16881" /> 

inside system.WebServer/httpProtocol/customHeaders section in Web.config file. 

Ho anche il HubConfiguration istituito per il mio percorso di mappatura in Global.asax per SignalR 1.0.1

  RouteTable.Routes.MapHubs(new HubConfiguration() 
      { 
       EnableCrossDomain = true 
      }); 

sguardi Tutto bene in IE10 e FF22. Tuttavia in Chrome, mi dà un senso quando SignalR tenta di fare l'handshake.

XMLHttpRequest cannot load http://localhost:16901/signalr/negotiate?_=1363560032589. Origin http://localhost:16881 is not allowed by Access-Control-Allow-Origin. 

so che posso farlo funziona con Chrome lanciando con --disable-web-sicurezza, ma in realtà non sono compatibili con il mio requisito. Per favore aiuto!

risposta

11

Ecco cosa dovete fare:

  1. Rimuovere jQuery.support.cors = true
  2. Rimuovere <add name="Access-Control-Allow-Origin" value="http://localhost:16881" />

Poi dovrebbe funzionare bene.

+0

Impressionante! È funzionato! Sai perché jQuery.support.cors = true e Access-Control-Allow-Origin potrebbero causare il problema per Chrome? – Adamy

+0

la mia ipotesi è che stavate impostando la cosa sbagliata per Access-Control-Allow-Origin, e che jQuery.support.cors = true. – davidfowl

+1

L'impostazione di jQuery.support.cors su true disabilita JSONP perché induce SignalR a presupporre che il browser supporti CORS. – halter73

0

Non è necessario utilizzare

jQuery.support.cors = true;

Invece è possibile abilitare il supporto CORS sulla classe di avvio sul metodo di configurazione. Ecco alcuni esempi:

 // Branch the pipeline here for requests that start with "/signalr" 
     app.Map("/signalr", map => 
     { 
      // Setup the CORS middleware to run before SignalR. 
      // By default this will allow all origins. You can 
      // configure the set of origins and/or http verbs by 
      // providing a cors options with a different policy. 
      map.UseCors(CorsOptions.AllowAll); 
      var hubConfiguration = new HubConfiguration 
      { 
       // You can enable JSONP by uncommenting line below. 
       // JSONP requests are insecure but some older browsers (and some 
       // versions of IE) require JSONP to work cross domain 
       // EnableJSONP = true 
      }; 
      // Run the SignalR pipeline. We're not using MapSignalR 
      // since this branch already runs under the "/signalr" 
      // path. 
      map.RunSignalR(hubConfiguration); 
     });