2013-08-27 6 views
6

Ich habe kürzlich ein Projekt von SignalR 2.0.0-beta1 auf 2.0.0-rc1 aktualisiert. Ich verstehe, dass in RC1 die Konfiguration der Unterstützung für domänenübergreifende Anforderungen geändert wurde. Ich habe mein Projekt aktualisiere ich jedoch die neue Syntax verwenden jetzt die folgende Fehlermeldung erhalten, wenn Sie versuchen, mit meiner Nabe zu kommunizieren:Überspringen von Domänenanfragen funktioniert nicht in SignalR 2.0.0-rc1

XMLHttpRequest nicht = 1377623738064" laden> http: // localhost: 8080/verhandeln? connection =% 5B% 7B% 22name% 22% 3A% 22chathub% 22% 7D% 5D & client = 1,3 & = 1377623738064. Origin http://localhost:7176 von Access-Control-Allow-Origin ist nicht erlaubt.

Die Client-Site läuft unter http://localhost:7176 und der Hub hört über eine Konsole Die Anwendung bei http://localhost:8080. Fehle ich hier etwas? Cross-Domain-Anfragen funktionierten, bevor ich auf RC1 umstieg.

Konsolenanwendung ENTRY POINT

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 CLASS

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

STARTUP CONFIGURATION

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

Antwort

8

Etwas stimmt nicht mit Ihrer Clientkonfiguration.

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.

Der Antrag verhandeln sollte http://localhost:8080/signalr/negotiate?... nicht http://localhost:8080/negotiate?... gemacht werden. Um dies zu beheben können Sie versuchen, die folgenden, bevor Sie anrufen $ .connection.hub.start:

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

+0

Ich wusste, dass es etwas war hing dumm. Ich konzentrierte mich so sehr auf die Tatsache, dass ich den Ansatz der domänenübergreifenden Konfiguration geändert hatte. Mir war nicht klar, dass ich versehentlich auch etwas anderes geändert hatte. Vielen Dank. – Scott

+0

Also, was ist der beste Weg, um die Cross-Domain in SignalR zu behandeln, wenn mehrere Umgebungen für die Serverseite beteiligt sind, z.B. Dev, Uat und Produktion? Ich meine, gibt es einen Weg, die Hub-Verbindung in jeder generierten Hub-Datei manuell zu ändern? – stt106

8

nicht sicher, ob diese Frage ausreichend beantwortet wurde, aber ich habe die folgenden Änderungen an der Probe zur Verfügung gestellt von Microsoft :

$.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(); 
    }); 
}); 

Und jetzt aktiviert das Kreuz Domain-Scripting ist:

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

Und ich folgendes an die JS Probe hinzugefügt. Hoffe, das hilft jemand anderem, ich war wirklich eine Weile verwirrt.

+0

Das funktioniert für mich. Danke vielmals! –

+0

Sah alle nach Antworten und fand glücklicherweise Ihre. Vielen Dank! –

+0

{jsonp: true} Upvote dafür. Ist es wichtig, json zu verwenden? oder es erlaubt nur, dass es benutzt wird? – Tauseef

3

Salam.

für Microsoft.Owin 2.x und höher:

Microsoft.Owin.Cors Paket über NuGet durch diesen Befehl in Package Manager-Konsole hinzufügen:

PM> Install-Package Microsoft.Owin.Cors 

und dann using dieses Paket in Startup Klassendatei:

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

dann den Quellcode ändern wie folgt:

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

In SiganlR 2.2: app.UseCors() gibt es nicht mehr. – nashwan

Verwandte Themen