【问题标题】:How to Update dashboard UI from Background Services in Blazor wasm如何从 Blazor wasm 中的后台服务更新仪表板 UI
【发布时间】:2021-10-29 00:14:48
【问题描述】:

我是 blazor wasm 的初学者,我想办法从我的后台服务(IHosteadService - 在我的 Blazor.Server 项目中)更新我的仪表板页面(在 Blazor.Client 项目中)。

基本上,我正在寻找从后台服务到我的仪表板 UI 的事件回调。

使用 .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();
    }
}

请指教。

【问题讨论】:

  • 你试过2路绑定吗?从后台类更新实体类(共享项目)并在客户端仪表板中绑定它。我不确定,但你可以试一试。

标签: asp.net-core .net-core blazor .net-5 blazor-webassembly


【解决方案1】:

Blazor.server 项目及其 BackgroundService 没有“直接”方式与 Blazor.client Webassembly 应用通信。必须使用 HTTP 或 Websockets 等协议进行通信。对于您的情况,我建议使用 SignalR,因为它可以实现实时通信。通过 websockets,所有订阅客户端都会收到通知。 Link to SignalR Documentation

【讨论】:

  • 是的,我使用了 signalR 来解决这个问题。非常感谢
猜你喜欢
  • 2021-09-27
  • 2021-08-09
  • 2017-10-27
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
相关资源
最近更新 更多