Dapr - “调用失败,id:webapi,错误:找不到服务:webapi”

Dapr - "failed to invoke, id: webapi, err: couldn't find service: webapi"

提问人:Edmond 提问时间:11/13/2023 最后编辑:Edmond 更新时间:11/14/2023 访问量:22

问:

我有一个 .net web api,我在其中安装了“dotnet add package Dapr.AspNetCore”,并将其包含在服务集合中:

services.AddControllers().AddDapr();
app.UseEndpoints(e =>
    {
        e.MapSubscribeHandler();
        e.MapControllers();
    });

我有这个POST方法:

    // Route is /login
    [Route(Program.ROOT + Program.TOKEN)]
    [HttpPost]
    [Consumes("application/json")]
    public async Task<IActionResult> Login([FromBody][Required] JsonDocument jsonData)
    {
        IResult result = await Task.Run(() => _userCommander.LoginUser(jsonData));
        return result.Ok ? Ok(result.Value) : BadRequest(result.Value);
    }

我运行了 dapr init 并将配置存档在 $HOME/.dapr 中。 我目前只在 program.cs 所在的 API 文件夹中使用此终端命令在本地运行 dapr。我已经尝试了有和没有应用程序协议:

dapr run --app-id webapi --app-port 51669 --dapr-http-port 3500 --app-protocol=https -- dotnet run

当我使用 dapr list 时,我可以验证 webapi 服务是否正在运行:

 APP ID  HTTP PORT  GRPC PORT  APP PORT  COMMAND     AGE  CREATED              DAPRD PID  CLI PID  APP PID
 webapi  3500       53942      51669     dotnet run  3m   2023-11-13 13:56.24  8192       8184     8193

当我尝试向我的端点发送发布请求时,它找不到要调用的服务。我通过 Postman 发送我需要发送的 Json 正文以及以下 url:

http://localhost:3500/v1.0/invoke/webapi/method/login

这会导致以下错误消息:

{
"errorCode": "ERR_DIRECT_INVOKE",
"message": "failed to invoke, id: webapi, err: couldn't find service: webapi"
}

我不明白为什么当我使用 dapr list 时它找不到 webapi 服务并且可以在那里看到该服务。在下图中,有我在项目上运行 dapr 时的日志。

dapr-logs

C# net-core asp.net-web-api dapr

评论


答:

0赞 Ester Kaufman 12/1/2023 #1

某些防病毒/安全软件可能会阻止 mdns 请求(这是 dapr 在本地运行时用于服务发现的软件)。

对我来说,禁用迈克菲解决了这个问题。

它与我的 VPN 配合得很好。但这也可能有助于在 VPN 关闭时尝试 diable 并再次检查。