如何在.net Core 3.0中将SignalR添加到辅助服务

时间:2019-12-18 09:07:09

标签: .net .net-core apache-kafka signalr

我正在使用消耗Kafka消息的工作程序服务。 我想在检索到消息时创建一个signalR事件,但目前无法使其正常工作。

public static async Task Main(string[] args)
{
    using (var host = Host.CreateDefaultBuilder(args)
      .ConfigureServices((hostContext, services) =>
      {
          services.AddHostedService<Worker>();
          services.AddTransient<IKafkaClient, KafkaClient>();
          services.AddSignalR();
      })
      .Build())
        {
            // Start the host
            await host.StartAsync();

            // Wait for the host to shutdown
            await host.WaitForShutdownAsync();
        }
}

以及我的员工服务

public class Worker : BackgroundService
{
    private readonly ILogger<Worker> _logger;
    private readonly IKafkaClient _kafkaClient;
    private readonly IHubContext<NotificationHub> _notificationHub;

    public Worker(ILogger<Worker> logger,
                  IKafkaClient kafkaClient,
                  IHubContext<NotificationHub> notificationHub)
    {
        _logger = logger;
        _kafkaClient = kafkaClient;
        _notificationHub = notificationHub;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
      // code here
    }
}

2 个答案:

答案 0 :(得分:0)

在您的启动password_field.send_keys(password) {'text': "".join(keys_to_typing(value)), for i in range(len(val)): TypeError: object of type 'NoneType' has no len() 方法上,添加:

AddAdditionalServices

然后将其注入您的工作者类中,例如:

services.AddSingleton<NotificationHub>()

您需要创建从类中调用的中心方法,例如:

private readonly IServiceProvider serviceProvider;

private NotificationHub NotificationHub
{
    get
    {
        return this.serviceProvider.GetRequiredService<NotificationsHub>();
    }
}

因此您可以在工作程序中调用它。

public async Task BroadcastMessage(string message){
  // your code here
}

答案 1 :(得分:-1)

我通过在我的backgroundservice的ExecuteAsync方法中添加Task.Yield()解决了我的问题。