0

我正在开发一个应用程序,该应用程序连接使用 Dapr(自托管)和 gRPC 客户端运行的应用程序。我使用 common.proto 和 runtime.proto。使用 DAPR CLI 时,我能够使连接正常工作。

但是当使用 DAPR 自托管实例时,使用 gRPC 端口时出现以下错误:

Grpc.Core.RpcException: 'Status(StatusCode="Internal", Detail="invoke API is not ready", DebugException="Grpc.Core.Internal.CoreErrorDetailException: {"created":"@1621435606.713000000","description":"Error received from peer ipv4:127.0.0.1:54000","file":"..\..\..\src\core\lib\surface\call.cc","file_line":1068,"grpc_message":"invoke API is not ready","grpc_status":13}")'

当我使用 dapr http 端口时

Grpc.Core.Internal.CoreErrorDetailException: {"created":"@1621435606.713000000","description":"Error received from peer ipv4:127.0.0.1:54000","file":"..\..\..\src\core\lib\surface\call.cc","file_line":1068,"grpc_message":"invoke API is not ready","grpc_status":13}")'

下面是 DAPR 服务器的 compose 文件

version: '3.4'

services:
  daprserver:
    image: ${DOCKER_REGISTRY-}daprserver
    build:
      context: .
      dockerfile: Dockerfile        
    environment:
    - ASPNETCORE_ENVIRONMENT=Development
    - ASPNETCORE_URLS=http://+:80
    networks:
    - daprserver-network
  daprserver-dapr:
    image: "daprio/dapr:latest"
    command: [ "./daprd", 
        "-app-id", "daprserver", 
        "-app-port", "80", 
        "-dapr-http-port","53001",
        "-dapr-grpc-port","53000"]
    ports:
    - 54000:53000 #grpc external:internal
    - 54001:53001 #http external:internal
    depends_on:
    - daprserver  
    networks:
    - daprserver-network
networks:
  daprserver-network:

客户端代码如下:

 var channel = new Channel("127.0.0.1:54000", ChannelCredentials.Insecure);
                var daprClient = new Dapr.Client.Autogen.Grpc.v1.Dapr.DaprClient(channel);
                var request = new InvokeServiceRequest
                {
                    Id = "daprserver",
                    Message = new InvokeRequest
                    {
                        Method = "weatherforecast",
                        HttpExtension = new HTTPExtension
                        {
                            Verb = HTTPExtension.Types.Verb.Get,
                        }
                    }
                };

                var invokeResponse = daprClient.InvokeServiceAsync(request).GetAwaiter().GetResult();
                var json = invokeResponse.Data.Value.ToStringUtf8();
                

我是否缺少设置或我的配置有任何问题?

4

1 回答 1

0

您需要在项目文件的命令提示符下使用以下命令运行应用程序。它将同时运行 dapr 和您的应用程序,您可以在任务管理器中看到两个进程,一个是 dapr.exe,第二个是 dotnet.exe。

dapr run --app-id yourappid dotnet run
于 2021-12-10T12:22:02.517 回答