2016-04-13 46 views
0

因此,我一直在試圖讓SignalR與使用OWIN和身份驗證的Web Api實例一起工作。找出CORS後(感謝SO的幫助),我幾乎在那裏。SignalR在客戶端生成的路徑不正確

我的Web客戶端失敗,並在控制檯上出現Javascript錯誤。

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

如果我把這個URL並把它放在瀏覽器中,那麼我得到一個404錯誤。但是,如果我添加/signalr/的路徑這樣...

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

我獲得與SignalR connectionid和一切適當的JSON響應...

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

所以它看起來好像一切正​​常除了客戶端生成的用於連接到SignalR集線器的URL缺少/signalr這一事實。

這是我的客戶端Javascript連接到集線器。我在哪裏可以指定路徑需要包括/signalr?因爲我以爲我已經是...

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

您可能會注意到我沒有包括<script src="signalr/hubs"></script>。這是因爲我自己創建了代理,而不是依靠自動生成的代理

回答

1

我想通了!它應該是很明顯,我...

在我,我需要添加\signalr路徑在客戶端上的Javascript ...

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

也許我應該看到,在我的public void Configuration(IAppBuilder)方法Startup.cs內類我的Web的API,我有以下..

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

我被指定子目錄"/signalr"