Как отправить новые / обновленные данные всем клиентам в SignalR для NET Core 2.2 - PullRequest
0 голосов
/ 16 июня 2019

Я не слишком знаком с signalr2 на asp.net-core, извините, я пытаюсь создать POC о том, как реализовать приложение CRUD в реальном времени с администратором и клиентом, используя signalr2, но у меня проблемы с данными сигнализатора.push, я продолжаю получать NullReferenceException: Object reference not set to an instance of an object. в этой строке await Clients.All.SendAsync("BroadcastData", data);

Ниже описано, как я настраиваю свой концентратор, используя несколько онлайн-примеров, которые я посмотрел:

public class OddPublisher : Hub
    {

        private readonly IOddServices _oddService;

        public OddPublisher(IOddServices oddService)
        {
            _oddService = oddService;
        }

        public async Task BroadcastData()
        {
            var data = _oddService.ClientQueryOdds();
            await Clients.All.SendAsync("BroadcastData", data); //breaks here
        }

    }

, и это вызваноАдминистратор, при успешной отправке и сохранении данных я вызываю BroadcastData()

    public class BaseController : Controller
    {
        public IOddServices _oddService;
        public readonly OddPublisher _publisher;
        public BaseController(IOddServices oddService, )
        {
            _oddService = oddService;
            _teamService = teamService;

            _publisher = new OddPublisher(oddService);
        }


        [HttpPost]
        public async Task<IActionResult> odd_entry(CreateOdd dto)
        {
            //somecode here...

            var results = _validator.Validate(dto);

            if(!results.IsValid)
            {
                results.AddToModelState(ModelState, null);

                return View(dto);
            }

            _oddService.CreateOddAndTeam(dto);

            await _publisher.BroadcastData(); //Breaks

            return RedirectToAction(nameof(index));
        }
    }

Сложив все инструкции, как указано в документации Microsoft Asp.Net Core Signalr, в моем автозагрузке добавлены все необходимые службы.

вот клиент и файл JS,

"use strict";

var connection = new signalR.HubConnectionBuilder().withUrl("/oddPublisher").build();

connection.on("BroadcastData", data => {

    console.table(data);
    //getAll();
})


connection.start().then(function () {
    getAll();
}).catch(function (err) {
    return console.error(err.toString());
});


function getAll() {
    var model = $('#dataModel');
    $.ajax({
        url: '/home/GetLatestOddData',
        contentType: 'application/html ; charset:utf-8',
        type: 'GET',
        dataType: 'html',
        success: function (result) { model.empty().append(result); }
    });
}

Нужна помощь, ребята, я до сих пор не знаю, что делаю не так, я буду очень признателен, если смогу помочьэто.

Заранее спасибо.

1 Ответ

0 голосов
/ 16 июня 2019

Оказывается, мне нужно было добавить IHubContext в мои концентраторы, чтобы иметь доступ к клиентам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...