2016-04-13 23 views
0

tarafından üretilen SignalR'ye yanlış yol Bu yüzden, OWIN ve kimlik doğrulamasını kullanan Web Api örneğimle çalışmak üzere SignalR almaya çalışmak için takılıyorum. CORS'i keşfettikten sonra (SO yardımına teşekkürler) neredeyse oradayım.İstemci

Web istemcim konsolda bir Javascript hatasıyla başarısız oluyor.

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

Bu URL'yi alıp tarayıcıda koyarsanız

emin yeterli bir 404 hatası alıyorum. Ben ... gibi yoluna /signalr/ eklemek Ancak eğer her şey çalışıyor sanki
http://localhost:45325/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22myhub%22%7D%5D&_=1460577212205 

Ben SignalR connectionid ve her şeyi uygun bir JSON yanıt ... Yani göründüğü

{ 
"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 
} 

olsun İstemcinin SignalR hub'ına bağlanmak için oluşturduğu URL'nin /signalr eksikliğinden başka.

İstemci tarafında, Hub'a bağlanan Javascript var. Yolun /signalr içermesi gereken yolu nerede belirleyebilirim? Çünkü bence ben zaten ... Ben <script src="signalr/hubs"></script> içermiyordu fark edebilirsiniz

<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> 

. Bunun nedeni, kendiliğinden oluşturulan vekil

cevap

1

'a güvenmek yerine kendimi yarattığım içindir. Bu

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

Belki Startup.cs içinde benim public void Configuration(IAppBuilder) yönteminde olduğu görmeliydiniz ... Ben \signalr yolunu eklemek için gerekli istemci üzerinde benim Javascript yılında

... bana açık olmalıydı benim Web Api sınıfı aşağıdaki ..

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); 
}); 

Ben alt dizini "/signalr"

belirterek vardı