2016-04-13 17 views
0

So habe ich wegstecken versucht, SignalR zu bekommen, um mit meiner Web-API-Instanz zu arbeiten, die OWIN und Authentifizierung verwendete. Nachdem ich CORS (dank SO Hilfe) herausgefunden habe, bin ich fast da.Falscher Pfad zu SignalR generiert auf Client

Mein Web-Client schlägt mit einem Javascript-Fehler auf der Konsole fehl.

http://localhost:45325/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22myhub%22%7D%5D&_=1460577212205 404 (Not Found) 

, wenn ich diese URL nehmen und es in einem Browser sicher genug bekomme ich einen 404 Fehler. Allerdings, wenn ich /signalr/ auf den Pfad als solche hinzufügen ...

http://localhost:45325/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22myhub%22%7D%5D&_=1460577212205 

ich eine richtige JSON-Antwort mit der SignalR connectionid und alles ...

{ 
"Url": "/signalr", 
"ConnectionToken": "<token here>", 
"ConnectionId": "0bf84c7a-0a28-4da9-bb9f-551de894cf0e", 
"KeepAliveTimeout": 20, 
"DisconnectTimeout": 30, 
"ConnectionTimeout": 110, 
"TryWebSockets": true, 
"ProtocolVersion": "1.5", 
"TransportConnectTimeout": 5, 
"LongPollDelay": 0 
} 

So sieht es aus, als ob alles funktioniert Abgesehen von der Tatsache, dass die URL, die der Client zur Verbindung mit dem SignalR-Hub generiert, die /signalr nicht enthält.

Hier ist mein Client-Seite Javascript, das mit dem Hub verbindet. Wo kann ich angeben, dass der Pfad /signalr enthalten muss? Weil ich dachte, dass ich schon war ...

<script src="scripts/jquery-2.2.2.min.js"></script> 
<script src="scripts/jquery.signalR-2.2.0.js"></script> 
<script> 
(function ($) { 
    $(function() { 
     var connection = $.hubConnection('/signalr/', {useDefaultPath: false}); 
     var myHubProxy = connection.createHubProxy('MyHub'); 
     myHubProxy.on('notify', function (username) { 
      console.log(username + ' has logged in'); 
      alert(username + ' has logged in'); 
     }); 

     connection.url = 'http://localhost:45325'; 

     connection.start() 
      .done(function() { 
       alert('Connected to MyHub: Connection ID = ' + connection.id); 
      }) 
      .fail(function(e) { 
       console.log('Connection error: ' + e); 
      }); 
    }); 
})(jQuery); 
</script> 

Sie werden feststellen, dass ich nicht <script src="signalr/hubs"></script> enthalten waren. Das liegt daran, dass ich den Proxy selbst erstellt habe, anstatt mich auf den automatisch generierten Proxy zu verlassen.

Antwort

1

Ich habe es herausgefunden! Es sollte mir gewesen offensichtlich ...

In meinem Javascript auf dem Client ich den \signalr Pfad hinzuzufügen benötigt ...

connection.url = 'http://localhost:45325/signalr'; 

Vielleicht sollte ich, dass im Innern der Startup.cs in meiner public void Configuration(IAppBuilder) Methode gesehen habe Klasse meiner Web Api hatte ich folgendes ..

app.Map("/signalr", map => 
{ 
    map.UseCors(CorsOptions.AllowAll); 
    var hubConfiguration = new HubConfiguration 
    { 
     // EnableJSONP = true; // I am not using as CORS is working just fine 
    }; 
    map.RunSignalR(hubConfiguration); 
}); 

ich das Unterverzeichnis "/signalr"

wurde Angabe
Verwandte Themen