2013-08-27 5 views
6

Recentemente ho aggiornato un progetto da SignalR 2.0.0-beta1 a 2.0.0-rc1. Capisco che in RC1, la configurazione del supporto per le richieste cross-domain è cambiata. Ho aggiornato il mio progetto per utilizzare la nuova sintassi però ora sto ottenendo il seguente errore quando si tenta di comunicare con il mio hub:Richieste di domini incrociati non funzionanti in SignalR 2.0.0-rc1

XMLHttpRequest non è possibile caricare = 1.377.623,738064" millions> http: // localhost: 8080/negoziare? connectionData =% 5B% 7B% 22name% 22% 3A% 22chathub% 22% 7D% 5D & clientProtocol = 1.3 & = 1.377.623,738064 millions. originaria http://localhost:7176 non è consentito dalla Access-Control-Allow-Origin.

Il sito client è in esecuzione su http://localhost:7176 e l'hub è in ascolto tramite una console e applicazione a http://localhost:8080. Mi sto perdendo qualcosa qui? Le richieste di domini incrociati funzionavano prima di essere aggiornato a RC1.

CONSOLE APP INGRESSO PUNTO

static void Main(string[] args) 
{ 
    var chatServer = new ChatServer(); 
    string endpoint = "http://localhost:8080"; 

    chatServer.Start(endpoint); 

    Console.WriteLine("Chat server listening at {0}...", endpoint); 
    Console.ReadLine(); 
} 

Chatserver CLASSE

public class ChatServer 
{ 
    public IDisposable Start(string url) 
    { 
     return WebApp.Start<Startup>(url); 
    } 
} 

STARTUP CONFIGURAZIONE

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     app.Map("/signalr", map => 
     { 
      map.UseCors(CorsOptions.AllowAll); 
      map.RunSignalR(new HubConfiguration { EnableJSONP = true }); 
     }); 
    } 
} 

risposta

8

C'è qualcosa che non va nella configurazione del tuo client.

XMLHttpRequest cannot load =1377623738064">http://localhost:8080/negotiate?connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D&clientProtocol=1.3&=1377623738064. Origin http://localhost:7176 is not allowed by Access-Control-Allow-Origin.

La richiesta negoziare dovrebbe essere fatto per http://localhost:8080/signalr/negotiate?... non http://localhost:8080/negotiate?.... Per risolvere questo problema è possibile provare quanto segue prima di chiamare $ .connection.hub.start:

$.connection.hub.url = http://localhost:8080/signalr;

+0

Sapevo che era qualcosa è stupido. Mi sono così concentrato sul fatto che avevo cambiato l'approccio alla configurazione del dominio incrociato. Non mi ero reso conto di aver inavvertitamente cambiato qualcos'altro. Grazie. – Scott

+0

Quindi qual è il modo migliore per gestire il dominio incrociato in signalR quando vi sono più ambienti coinvolti per il lato server, ad es. dev, uat e produzione? Voglio dire c'è un modo oltre a cambiare manualmente la connessione hub in ogni file hub generato? – stt106

8

Non sono sicuro se questa domanda è stata adeguatamente risposto, ma ho fatto le seguenti modifiche al campione fornito da Microsoft :

public void Configuration(IAppBuilder app) 
     { 
      var config = new HubConfiguration(); 
      config.EnableJSONP = true; 
      app.MapSignalR(config); 
     } 

E ho aggiunto il seguente al campione JS:

$.connection.hub.start({ jsonp: true }).done(function() { 
    $('#sendmessage').click(function() { 
     // Call the Send method on the hub. 
     chat.server.send($('#displayname').val(), $('#message').val()); 
     // Clear text box and reset focus for next comment. 
     $('#message').val('').focus(); 
    }); 
}); 

E ora il dominio scripting cross è abilitata. Spero che questo aiuti qualcun altro, ne sono rimasto davvero perplesso per un po '.

+0

Questo funziona per me. Molte grazie! –

+0

Ho cercato dappertutto risposte e fortunatamente ho trovato il tuo. Grazie! –

+0

{jsonp: true} Voto positivo per questo. Fa foce usare json? o semplicemente gli permette di essere usato? – Tauseef

3

Salam.

per Microsoft.Owin 2.x e sopra:

Aggiungi Microsoft.Owin.Cors pacchetto tramite NuGet da questo comando in consolle Package Manager:

PM> Install-Package Microsoft.Owin.Cors 

e poi using questo pacchetto nel file di Startup classe:

using Microsoft.Owin; 
using Microsoft.Owin.Cors; 

quindi modificare il codice sorgente così:

// app.MapHubs(new HubConfiguration { EnableCrossDomain = true }); 
app.UseCors(CorsOptions.AllowAll); 
app.MapSignalR(); 
+0

In SiganlR 2.2: app.UseCors() non c'è più. – nashwan