将 C# GRPC 客户端连接到 Go 服务器
Connect C# GRPC client to Go Server
我正在尝试从 C# 客户端连接到 Go GRPC 服务器,但客户端通道无法连接到服务器。
我希望连接到由 Go 编写和托管的 GRPC 服务器以及用 C# 编写的客户端时应该没有问题。
我的 Go Server 连接是这样设置的:
lis, err := net.Listen("tcp", ":50051")
if err != nil {
log.Fatalf("Failed to listen: %v", err)
}
s := grpc.NewServer()
pb.Register**ServiceServer(s, &server{})
reflection.Register(s)
if err := s.Serve(lis); err != nil {
log.Fatalf("Failed to serve: %v", err)
}
这是相当标准的,我知道我的服务器正在工作,因为我能够使用提供的端口连接到 Go 客户端:
conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure(), grpc.WithBlock())
但是当我尝试使用 Grpc.Net.Client
包使用 C# 客户端进行连接时:
var channel = GrpcChannel.ForAddress(@"http://localhost:50051", new GrpcChannelOptions
{
Credentials = ChannelCredentials.Insecure
});
我得到一个 Grpc.Core.RpcException: 'Status(StatusCode=Internal, Detail="Bad gRPC response. Response protocol downgraded to HTTP/1.1.")'
异常。
或者像这样使用 Grpc.Core
包:
var channel = new Channel("localhost:50051", ChannelCredentials.Insecure);
导致 Grpc.Core.RpcException: 'Status(StatusCode=Unavailable, Detail="failed to connect to all addresses")'
异常。
我已经尝试了在 C# 客户端中设置和不设置 Http2UnencryptedSupport
的两种方法,但是我 运行 不知道为什么我无法连接。
任何关于我哪里出错的建议都将不胜感激。
对于 .NET 3.x,设置:
AppContext.SetSwitch(
"System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
并使用 http
作为 URL 中的协议。
对于 .NET 5.0,使用版本 Grpc.Net.Client
版本 2.32.0 或更高版本。
我正在尝试从 C# 客户端连接到 Go GRPC 服务器,但客户端通道无法连接到服务器。
我希望连接到由 Go 编写和托管的 GRPC 服务器以及用 C# 编写的客户端时应该没有问题。
我的 Go Server 连接是这样设置的:
lis, err := net.Listen("tcp", ":50051")
if err != nil {
log.Fatalf("Failed to listen: %v", err)
}
s := grpc.NewServer()
pb.Register**ServiceServer(s, &server{})
reflection.Register(s)
if err := s.Serve(lis); err != nil {
log.Fatalf("Failed to serve: %v", err)
}
这是相当标准的,我知道我的服务器正在工作,因为我能够使用提供的端口连接到 Go 客户端:
conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure(), grpc.WithBlock())
但是当我尝试使用 Grpc.Net.Client
包使用 C# 客户端进行连接时:
var channel = GrpcChannel.ForAddress(@"http://localhost:50051", new GrpcChannelOptions
{
Credentials = ChannelCredentials.Insecure
});
我得到一个 Grpc.Core.RpcException: 'Status(StatusCode=Internal, Detail="Bad gRPC response. Response protocol downgraded to HTTP/1.1.")'
异常。
或者像这样使用 Grpc.Core
包:
var channel = new Channel("localhost:50051", ChannelCredentials.Insecure);
导致 Grpc.Core.RpcException: 'Status(StatusCode=Unavailable, Detail="failed to connect to all addresses")'
异常。
我已经尝试了在 C# 客户端中设置和不设置 Http2UnencryptedSupport
的两种方法,但是我 运行 不知道为什么我无法连接。
任何关于我哪里出错的建议都将不胜感激。
对于 .NET 3.x,设置:
AppContext.SetSwitch(
"System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
并使用 http
作为 URL 中的协议。
对于 .NET 5.0,使用版本 Grpc.Net.Client
版本 2.32.0 或更高版本。