password22
@password22

Почему SignalR в asp.net c# с клиентом js не работает?

Я делал в другом проекте похожую вещь, она прекрасно работала. Суть: при переходе на страницу MyData присылаются данные на клиента js, он должен их вывести

Сейчас я сделал все по этой статье https://metanit.com/sharp/aspnet5/30.6.php, я понимаю что всё должно работать, но нет. Нет никаких ошибок, подключение хаба с клиентом js устанавливается без проблем, но не выводятся данные.

Controller
public class HomeController : Controller
    {
        private ApplicationDbContext _db;
        private IHubContext<MoexHub> _hub;
        public HomeController(ApplicationDbContext db, IHubContext<MoexHub> hub)
        {
            _db = db;
            _hub = hub;
        }



        public IActionResult Index()
        {
            return View();
        }

        public async Task<IActionResult> MyData()
        {
            await _hub.Clients.All.SendAsync("notify", "this is my message");
            return View();
        }
}


JS
const hubConnection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .build();

// получение сообщения от сервера
hubConnection.on('notify', function (message) {

    // создает элемент <p> для сообщения пользователя
    let elem = document.createElement("p");
    elem.appendChild(document.createTextNode(message));

    document.getElementById("notify").appendChild(elem);

    console.log(message);

});
hubConnection.start();


VIEW
<div id="notify"></div>

Layout, а именно как подключены все файлы
<script src="~/lib/jquery/dist/jquery.min.js"></script>
    <script src="~/lib/signalr/dist/browser/signalr.min.js"></script>
    <script src="~/js/LoadData.js"></script>
    @await RenderSectionAsync("Scripts", required: false)
</body>
</html>


В startup я разумеется всё добавил, никаких ошибок нет.
  • Вопрос задан
  • 140 просмотров
Пригласить эксперта
Ответы на вопрос 1
Название евента чувствительно к регистру.
На стороне C# ты отправляешь "Notify", а на стороне js подписываешься на "notify".
Поменяй так, чтобы на обоих сторонах совпадало.
Ошибок, естественно, нет, тк signalr не знает ничего о том, какие евенты может отправлять бэк и фронт.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы