Поэтому я следовал этому короткому руководству с сайта MS по созданию приложения SignalR: Приложение SignalR
Я бы подумал, что смогу использовать локальный API для наблюдения за изменением счетчика после добавив строку к нему в режиме реального времени. Я использовал AJAX для этого:
function getALL() {
$.ajax({
url: 'http://localhost:8080/api/GetCount',
contentType: 'application/json ; charset:utf-8',
type: 'GET',
success: function (data) {
console.log(data);
document.getElementById("messageList").innerHTML = data[0].Count;
}
});
}
Конечно, инициированный хаб с: var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
connection.on("ReceiveMessage", function () {
getALL();
});
connection.start().then(function () {
getALL();
connection.invoke("SendMessage").catch(function (err) {
return console.error(err.toString());
});
}).catch(function (err) {
return console.error(err.toString());
});
Теперь приведенный выше код работает и показывает мне данные в первый раз, но когда я добавляю еще одну строку, ничего не происходит. Что мне не хватает? Событие onclick в примере MS работает. Но нет, если я попытаюсь загрузить его без событий.
Мой концентратор:
public class ChatHub : Hub
{
private IHubContext<ChatHub> _hubContext;
public ChatHub(IHubContext<ChatHub> hubContext) { _hubContext = hubContext; }
public async Task SendMessage()
{
await _hubContext.Clients.All.SendAsync("ReceiveMessage");
}
}
}
Я добавляю AJAX в неправильном месте? В моем хабе отсутствует Модель сущности? Если да, то почему, когда я вызываю локальный API.
Я также загрузил концентратор в файл Startup.cs, как советовалось:
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<ChatHub>("/chatHub");
endpoints.MapFallbackToPage("/_Host");
});
Я пытаюсь сделать это с помощью net Core 3.1. Любые предложения полезны. Я думал, что это будет простой пример для модификации, но мне пока не повезло. Спасибо всем.