问题描述
我有一个简单的 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;
}
文件结构
项目文件输入
<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