-1

我正在尝试使用 Dapr 在 C# 控制台应用程序中实现订阅者,但它给出了以下错误。

错误:

应用程序通道未初始化,如果需要订阅订阅,请确保指定 -app-port

成功退出应用程序

收到终止信号:成功关闭 Exited Dapr

代码:

public static void Main(string[] args)
{
    DaprClient _dapr = new DaprClientBuilder().Build();
    _dapr.PublishEventAsync("pubSubName", "topicName", "data");
}
4

1 回答 1

0

我可以通过将控制台应用程序转换为 windows (worker) 服务来解决这个问题。

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

public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
    services.AddHostedService<MyService>();
})
.ConfigureWebHostDefaults((builder) =>
{
    builder.UseStartup<Startup>();
});

public  class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDaprClient();
    }
    public void Configure()
    {
    }
}

public class MyService: BackgroundService
{
    private readonly DaprClient _dapr;

    public PaymentService(DaprClient dapr)
    {
        _dapr = dapr;
    }
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            await _dapr.PublishEventAsync();
            await Task.Delay(1000, stoppingToken);
        }
    }
}
于 2021-12-10T11:41:50.210 回答