#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, чтобы исправить это. Большое спасибо