SignalR Negotiate 404
Я использую SignalR 2.0. Все работает нормально при запуске локально на моем VS 2012. Но когда я публикую сайт в IIS, он ломается. Сайт загружается, но один из скриптов возвращает 404 Not Found. script что-то вроде.
https://example.com/signalr/negotiate?xxx
Этот путь не существует. Правильный путь должен быть:
https://example.com /private/signalr/negotiate? xxx
Обратите внимание на часть, выделенную полужирным шрифтом.
Внутри WebSite (https://example.com/) У меня есть другое приложение (https://example.com/private/). Этот использует SignalR.
Это похоже на ошибку в SignalR, поскольку путь signalr/hubs доступен с моего личного сайта.
Ответы
Ответ 1
У меня была аналогичная проблема.
Вот документация для настройки /signalr URL.
Однако мое решение отличалось от документов.
Вместо изменения стандарта app.MapSignalR()
я изменил код клиента, чтобы использовать /MyApp/signalr
. Вот код, где "MyApp" является виртуальным каталогом моего веб-приложения.
var connection = $.hubConnection('/MyApp/signalr', {useDefaultPath: false});
var changesHub = connection.createHubProxy('changesHub');
changesHub.on('userCountChanged', function (count) {
$('#user-count').text(count);
});
connection.start().done(function () {
console.log('Hub has started');
changesHub.invoke('subscribeToChanges', user.id);
});
Я пробовал наоборот (изменил MapSignalR на путь /signalr ), но это не сработало, и согласование все еще маршрутизировалось в/MyApp/signalr/negotiate.
Ответ 2
У меня была такая же проблема, когда веб-сайт с signalr не запускался как корневой сайт. Ниже решение работало для меня. вместо /signalr
используйте ../signalr
. он будет работать с любой папкой с именем сайта. нет жесткокодированного имени 'MyApp'
var connection = $.hubConnection('../signalr', {useDefaultPath: false});
Ответ 3
Была та же проблема. веб-сайты, работающие как виртуальные каталоги корневого сайта. По какой-то причине префикс с../как в.. /signalr не работал, но. /signalr.
Мой пример кода:
function initSR() {
// logs signalr messages
$.connection.hub.logging = true;
// Declare a proxy to reference the hub.
var chat = $.connection.myHub;
$.connection.hub.url = "./signalr";
$.connection.hub.start();
// Create a function that the hub can call to broadcast messages.
chat.client.broadcastMessage = function (message) {
// Process Message, take action upon receipt
alert(message);
};
}
Ответ 4
Возможно, вы добавили MapSignalR() в свое приложение (https://example.com/private/).
Если вы хотите его в корне, то сделайте конфигурацию на своем веб-сайте (https://example.com/)
Ответ 5
Ваша проблема в коде сервера. Просто поместите app.UseSignalR()
, прежде чем app.UseSpaStaticFiles()
в Startup.cs
файле