Как обновить пользовательский интерфейс панели мониторинга из фоновых служб в Blazor wasm

#asp.net-core #.net-core #blazor #.net-5 #blazor-webassembly

Вопрос:

Я новичок в blazor wasm и ломаю голову, чтобы найти способ обновить свою страницу панели мониторинга ( которая находится внутри Blazor.Клиентский проект) из моей фоновой службы (IHosteadService — которая находится в моем Блейзоре.Серверный проект).

В принципе, я ищу обратный вызов события из фоновой службы в мой пользовательский интерфейс панели мониторинга.

использование .NET5 blazor Wasm ( asp.net ядро размещено)

мой сервисный код bg:

 internal class MessageConsumer: BackgroundService
{
    private readonly ILogger<MessageConsumer> _log;
    private readonly IConsumer<string, int> _consumer;

    public MessageConsumer(ILogger<MessageConsumer> log, IConsumer<string, int> consumer)
    {
        _log = log;
        _consumer = consumer;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        await Task.Yield();
        
        var i = 0;
        while (!stoppingToken.IsCancellationRequested)
        {
            var consumeResult = _consumer.Consume(stoppingToken);
            
            _log.LogInformation(consumeResult.Message.Key   " - "   consumeResult.Message.Value);

      /** Here I want to NOTIFY my dashboard UI ***/

            
            if (i   % 1000 == 0)
            {
                _consumer.Commit();
            }
        }
    }

    public override void Dispose()
    {
        _consumer.Dispose();
        base.Dispose();
    }
}
 

Пожалуйста, посоветуйте.

Комментарии:

1. Вы пробовали 2-х стороннюю привязку? обновите класс сущностей (общий проект) из фонового класса и свяжите его в панели мониторинга клиента. Я не уверен, но вы можете попробовать.

Ответ №1:

Для вашего проекта Blazor.server с его BackgroundService нет «прямого» способа связи с приложением веб-сборки Blazor.client. Связь должна осуществляться с использованием протокола, такого как HTTP или Websockets. Для вашего случая я бы предложил SignalR, потому что он обеспечивает связь в реальном времени. Через веб-сайты все подписавшиеся клиенты получают уведомления. Ссылка на документацию SignalR

Комментарии:

1. Да, я использовал SignalR, чтобы исправить это. Большое спасибо