Я не могу определить "клиент" SignalR - PullRequest
0 голосов
/ 28 сентября 2018

Я начинаю работать с signalR, но у меня есть ошибка (я видел несколько ответов в Интернете, но ни один не помог мне), у меня есть следующие файлы:

GenteHub.cs

 using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using Microsoft.AspNet.SignalR;
    using Microsoft.AspNet.SignalR.Hubs;

    namespace EjemploSignal
    {
        public class GenteHub:Hub
        {
            [HubMethodName("noti")]
            public static void llenarDatos()
            {
                IHubContext context = GlobalHost.ConnectionManager.GetHubContext<GenteHub>();
                context.Clients.All.updateDatos();
            }
        }
    }

enlace.js

var notificationHub = $.connection.genteHub;

    $.connection.hub.start().done(function () {
        cargarDatos();
    });

    $.notificationHub.client.updateDatos = function () {
        cargarDatos();
    };

    function cargarDatos() {
        $.ajax({
            url: "Home/lista",
            method: "GET",
            async: false,
            dataType: "json",
            success: function (respuesta2) {
                console.log("Respuesta", respuesta2);

            }
        });
    }

Layout.html (ссылки на скрипты)

<script src="~/Scripts/jquery-3.3.1.js"></script>
    <script src="~/Scripts/jquery.signalR-2.3.0.js"></script>
    <script src="~/signalr/hubs"></script>
    <script src="~/Scripts/enlace.js"></script>
    <script src="~/Scripts/modernizr-2.6.2.js"></script>
    <script src="~/Scripts/bootstrap.min.js"></script>

У меня есть 2 ошибки, первая в консоли:

enter image description here

Согласно нескольким примерам, потому что я не ставлю имякласс и другие, это то, что я должен поставить имя [HubMethodName] (я уже поставил оба и имею ту же ошибку)

Вторая ошибка, которую я получаю в сети:

if (typeof ($.signalR) !== "function") {
        throw new Error("SignalR: SignalR is not loaded. Please ensure jquery.signalR-x.js is referenced before ~/signalr/js.");
    }

Что соответствует тому, почему файл hub не генерируется, потому что:

  • Не размещен правильный порядок файлов (Когда они у меня в порядке) jquery, сигнал jquery, хаб")
  • Он должен быть помещен или нет символ (~) (Плохо то, что я его надеваю и удаляю, а ошибка все еще сохраняется)

НекоторыеРекомендуется удалить $. из

$.notificationHub.client.updateDatos = function () {
        cargarDatos();
};

, чтобы избежать первой ошибки, и она работает, но когда я загрузил страницу, cargarDatos() из $.connection.hub.start().done(function () развертывается правильно, но когда я добавляю новую запись вВ базе данных ничего не происходит.

В чем мои ошибки в этом коде?

1 Ответ

0 голосов
/ 28 сентября 2018

Это должно быть notificationHub.client вместо $.notificationHub.client. Поэтому напишите свой код enlace.js следующим образом:

var notificationHub = $.connection.genteHub;

$.connection.hub.start().done(function () {
     cargarDatos();
});

notificationHub.client.updateDatos = function () { // not $.notificationHub, its notificationHub
        cargarDatos();
};

function cargarDatos() {
        $.ajax({
            url: "/Home/lista",
            method: "GET",
            contentType: "application/json",
            success: function (respuesta2) {
                console.log("Respuesta", respuesta2);

       }
    });
}

, когда я добавляю новую запись в базу данных, ничего не происходит.

Он не будет вызываться автоматически, когда вы добавляете записи в базу данных.Вы должны вызвать его вручную после добавления записей в базу данных следующим образом:

[HttpPost]
public ActionResult YourAddRecordMethod(YourRecord yourRecord)
{
    // Your adding record code here

    HubContext context = GlobalHost.ConnectionManager.GetHubContext<GenteHub>();
    context.Clients.All.updateDatos();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...