因此,我一直在試圖讓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>
。這是因爲我自己創建了代理,而不是依靠自動生成的代理