RpcException: Status(StatusCode=Internal, Detail="Error starting gRPC call. HttpRequestException: An error occurred while sending the request. IOException: The response ended prematurely, with at least 9 additional bytes expected.")
经常报这样的错我。我把坑了好几天。。。
记录一下
第一步 制定kestrel 监听的端口 并制定是http2 协议
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.ConfigureKestrel(option => { option.ListenLocalhost(5001, o => o.Protocols = Microsoft.AspNetCore.Server.Kestrel.Core.HttpProtocols.Http2); }); webBuilder.UseStartup<Startup>(); }); }
第二部 客户端调用时候
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); string targetUrl = "http://localhost:5001"; using (var channel = GrpcChannel.ForAddress(targetUrl)) { var client = new Score.ScoreClient(channel); Console.WriteLine("***************单次调用************"); { var reply = await client.GetScoreAsync(new ScoreRequest() { LessonId = "123" }); string result = Newtonsoft.Json.JsonConvert.SerializeObject(reply.Score); Console.WriteLine($"ScoreClient {Thread.CurrentThread.ManagedThreadId} 服务返回数据1:{result} "); base.ViewBag.Result = result; } }