英文:
Postman - "Could not load server reflection. Details: unknown error" when using GRPC server reflection
问题
I am trying to use Postman on my GRPC service as described here: https://learn.microsoft.com/en-us/aspnet/core/grpc/test-tools?view=aspnetcore-6.0
Unfortunately, I am getting the error below:
> Could not load server reflection.
Details: unknown error
In Console I can see a bunch of info messages, no errors:
> info: Microsoft.AspNetCore.Hosting.Diagnostics2
> Request finished HTTP/2 POST http://localhost:5001/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo
> application/grpc - - 200 - application/grpc 57.0449ms
info: Microsoft.AspNetCore.Hosting.Diagnostics2
> Request finished HTTP/2 POST http://localhost:5001/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo
> application/grpc - - 200 - application/grpc 158.2632ms
> info:
> Microsoft.AspNetCore.Routing.EndpointMiddleware1
> Executed endpoint 'gRPC - /grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo'
Not sure what can be done to investigate and fix.
If I import the proto files to Postman, I can execute an endpoint and it works OK.
Some details:
- I am using http/2 over HTTP.
- Postman Version 10.14.5
- All grpc packages are version 2.50.0
- I am tried a few ways of enabling http/2 as in this answer
Any help appreciated!
英文:
I am trying to use Postman on my GRPC service as described here: https://learn.microsoft.com/en-us/aspnet/core/grpc/test-tools?view=aspnetcore-6.0
Unfortunately, I am getting the error below:
> Could not load server reflection.
Details: unknown error
In Console I can see a bunch of info messages, no errors:
> info: Microsoft.AspNetCore.Hosting.Diagnostics2
> Request finished HTTP/2 POST http://localhost:5001/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo
> application/grpc - - 200 - application/grpc 57.0449ms
info: Microsoft.AspNetCore.Hosting.Diagnostics2
> Request finished HTTP/2 POST http://localhost:5001/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo
> application/grpc - - 200 - application/grpc 158.2632ms
> info:
> Microsoft.AspNetCore.Routing.EndpointMiddleware1
> Executed endpoint 'gRPC - /grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo'
Not sure what can be done to investigate and fix.
If I import the proto files to Postman, I can execute an endpoint and it works OK.
Some details:
- I am using http/2 over HTTP.
- Postman Version 10.14.5
- All grpc packages are version 2.50.0
- I am tried a few ways of enabling http/2 as in this answer
Any help appreciated!
答案1
得分: 1
我已经使用 https://github.com/fullstorydev/grpcurl 代替 Postman 连接到服务。它立即给我一个有意义的错误:
未能解析符号 "My.Service":
未找到符号:My.Service
造成原因:找不到文件:google/protobuf/Empty.proto
这有点令人困惑,尤其是服务正常运行。但事实证明,我的导入定义大小写不正确(请参见 https://github.com/fullstorydev/grpcurl/issues/203)。
我有 import "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
。
英文:
I have used https://github.com/fullstorydev/grpcurl instead of Postman to connect to the service. It immediately gave me meaningful error:
> Failed to resolve symbol "My.Service":
Symbol not found: My.Service
caused by: File not found: google/protobuf/Empty.proto
It was a bit puzzling, especially that the service works OK.
However, it turns out that my import definitions had an incorrect casing (see https://github.com/fullstorydev/grpcurl/issues/203).
I had "google/protobuf/Empty.proto";
instead of import "google/protobuf/empty.proto";
.
After correcting it works fine both in Postman and Grpcurl.
For the record - it's not that Grpcurl has better error handling than Postman.
It depends - for example, when an incorrect protocol is used (HTTP 1 instead of HTTP 2), Grpcurl just says Failed to dial target host "localhost:5001": context deadline exceeded
whereas Postman's error is more meaningful: INTERNAL: Received RST_STREAM with code 2 triggered by internal client error: Protocol error
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论