Postman - 使用 GRPC 服务器反射时“无法加载服务器反射。详细信息:未知错误”

问题描述 投票:0回答:2

我正在尝试在我的 GRPC 服务上使用 Postman,如下所述:https://learn.microsoft.com/en-us/aspnet/core/grpc/test-tools?view=aspnetcore-6.0

不幸的是,我收到以下错误:

无法加载服务器反射。
详细信息:未知错误

enter image description here

在控制台中我可以看到一堆信息消息,没有错误:

信息:Microsoft.AspNetCore.Hosting.Diagnostics2 请求完成 HTTP/2 POST http://localhost:5001/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo 应用程序/grpc - - 200 - 应用程序/grpc 57.0449ms
信息:Microsoft.AspNetCore.Hosting.Diagnostics2 请求完成 HTTP/2 POST http://localhost:5001/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo 应用程序/grpc - - 200 - 应用程序/grpc 158.2632ms
信息: Microsoft.AspNetCore.Routing.EndpointMiddleware1
执行端点“gRPC - /grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo”

不确定可以采取哪些措施来调查和修复。
如果我将原始文件导入 Postman,我可以执行端点并且它可以正常工作。

一些细节:

  • 我正在通过 HTTP 使用 http/2。
  • 邮差版本10.14.5
  • 所有grpc包都是2.50.0版本
  • 我尝试了几种启用http/2的方法,如这个答案

任何帮助表示赞赏!

c# postman protocol-buffers grpc
2个回答
2
投票

我使用 https://github.com/fullstorydev/grpcurl 而不是 Postman 来连接到该服务。它立即给了我有意义的错误:

无法解析符号“My.Service”:
找不到符号:My.Service
原因:找不到文件:google/protobuf/Empty.proto

有点费解,尤其是服务还可以。
然而,事实证明我的导入定义的大小写不正确(请参阅https://github.com/fullstorydev/grpcurl/issues/203)。

我有

"google/protobuf/Empty.proto";
而不是
import "google/protobuf/empty.proto";

更正后,它在 Postman 和 Grpcurl 中都可以正常工作。

郑重声明 - Grpcurl 的错误处理能力并不比 Postman 更好
这取决于 - 例如,当使用不正确的协议时(HTTP 1 而不是 HTTP 2),Grpcurl 只是说

Failed to dial target host "localhost:5001": context deadline exceeded
而 Postman 的错误更有意义:
INTERNAL: Received RST_STREAM with code 2 triggered by internal client error: Protocol error


0
投票

今天,我在项目中遇到了这个问题。我找到了解决方案。

您必须为 gRPC 启用服务器反射。

问题:

info: Grpc.AspNetCore.Server.Internal.ServerCallHandlerFactory[1]
  Service 'grpc.reflection.v1alpha.ServerReflection' is unimplemented.

解决方案:

首先,安装

Grpc.AspNetCore.Server.Reflection
NuGet 包。这将包含我们需要的 ServerReflection 实现,它允许外部服务和工具发现现有方法

其次,使用AddGrpcReflection扩展方法注册服务器反射:

builder.Services.AddGrpcReflection();

第三,使用MapGrpcReflectionService扩展方法注册服务器反射中间件:

app.MapGrpcReflectionService();

了解更多信息,您可以访问此链接:启用 gRPC 服务器反射

© www.soinside.com 2019 - 2024. All rights reserved.