asp. net core 3.1 - Шаблон службы рабочего - Реализация SignalR - PullRequest
1 голос
/ 18 июня 2020

Я пытаюсь передать сообщение клиентам с рабочим сервисом в. net core 3.1. У меня нет Startup.cs (нет конечной точки et c.). У меня есть только Program.cs:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .UseWindowsService()
            .ConfigureServices((hostContext, services) =>
            {
                //services.AddSignalR();
                services.AddHostedService<Worker>();
            });
}

И это рабочий (Worker.cs):

public class Worker : BackgroundService
{
    private readonly ILogger<Worker> _logger;
    //private readonly IHubContext<OperatorHub, IMessage> _operatorHub;



    public Worker(ILogger<Worker> logger/*, IHubContext<OperatorHub, IMessage> operatorHub*/)
    {
        _logger = logger;
        //_operatorHub = operatorHub;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            //await _operatorHub.Clients.All.SendMessage("hello fucking world!");
            _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
            await Task.Delay(1000, stoppingToken);
        }
    }
}

Из того, что я собрал из отдельной документации (но прямо сейчас нет документация по inte rnet об этом) Это интерфейс, который я создал (IMessage.cs):

public interface IMessage
{
    Task SendMessage(string message);
}

А это класс концентратора (OperatorHub.cs):

public class OperatorHub : Hub<IMessage>
{
    public async Task BroadcastMessage(string message)
    {
        await Clients.All.SendMessage(message);
    }
}

Когда я запускаю, я получаю исключение из-за строки services.AddSignalR(); в Program.cs. Я попытался добавить что-то вроде services.AddSingleton<OperatorHub>() в ConfigureServices, но тоже не повезло.

Небольшая помощь была бы очень признательна. Заранее спасибо.

1 Ответ

0 голосов
/ 19 июня 2020

Похоже, что базовый шаблон не включает библиотеку / пакет, который вы хотите использовать для signalr, nuget (. net pacakage manager) придется, но использовал для его добавления. Попробуйте добавить пакет Microsoft.AspNetCore.SignalR nuget или отредактируйте файл .csproj, чтобы добавить пакет вручную, чтобы он выглядел примерно так:

<Project Sdk="Microsoft.NET.Sdk.Worker">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.4"/>
    <PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.1.0"/>
  </ItemGroup>
</Project>
...