无法使用 gRPCUI 加载依赖的 .proto 文件

问题描述

我有一个简单的 gRPC 应用。我有 2 个 proto 文件

1.问候.proto

Syntax = "proto3";
import "protos/common.proto";
option csharp_namespace = "Module.SubModule.API";
package greet;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
  Error error = 2;
}

2. common.proto

Syntax = "proto3";
option csharp_namespace = "Module.SubModule.API";
package greet;

message Error {
    int32 status_code = 1;
}

文件结构

Project File Structure

项目文件输入

  <ItemGroup>
    <Protobuf Include="Protos\common.proto" GrpcServices="Server" />
    <Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
  </ItemGroup>

当我运行应用程序然后使用 grpcui localhost:5001 时,我收到以下错误消息

Failed to compute set of methods to expose: Symbol not found: greet.Greeter
caused by: File not found: protos/common.proto

有人可以帮忙吗? common.proto 文件位于同一目录中,应用程序运行良好,没有任何构建错误。但是当使用 gRPCUI 时,我明白了。

解决方法

这可能是服务器反射问题。查看 github 上的自述文件 - Proto Source Files 它说如果不支持服务器重新选择,则包含要正确包含的依赖项的导入路径。

这篇文章可能也有帮助gRPC Server Reflection in the .NET world