【问题标题】:.net Grpc Request protocol 'HTTP/1.1' is not supported.net Grpc 请求协议“HTTP/1.1”不受支持
【发布时间】:2021-02-17 10:35:45
【问题描述】:

我在 net5 中实现了一个简单的 gRPC 服务,类似于项目模板中的 GreeterService。

服务在使用 IIS LocalHost 时工作正常,但客户端在调用远程服务器时抛出此异常:

Grpc.Core.RpcException HResult=0x80131500 Message=Status(StatusCode="Internal", Detail="Request protocol 'HTTP/1.1' is not supported.")

我认为 Grpc 默认使用 HTTP/2。我做错了什么?

【问题讨论】:

  • 您有IIS installation supporting HTTP/2,即Server 2016 或Windows 10?你有证书(TLS)吗?
  • 没有任何代码,只能猜测。是的,gRPC 适用于 HTTP/2。所以当只有 HTTP/1.1 可用时,它是行不通的。 HTTP/2 需要 HTTPS,所以如果客户端(或服务器)不使用 HTTPS,就不能使用 gRPC
  • Browsers 无法使用 gRPC,因此创建了 gRPC-Web 规范。例如,这会影响 SPA 和 Blazor WASM。

标签: c# .net grpc


【解决方案1】:

感谢您的回复。看完后 this article 我意识到我需要将 Grpc-Web 代理添加到我的应用程序中,因为这会将 HTTP/1.1 客户端消息转换为 HTTP/2。

客户端和服务器的代码添加在this article中解释。

进行这些更改/添加后,我的 gRPC 消息传递服务工作正常。重要的是 - 我花了很多时间试图弄清楚如何在我的看涨期权中引用证书 - 但没有证书,消息传递也能正常工作。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我已将它与 grpc web 作为反向代理一起出售。 首先,您应该在您的 grpc 服务项目上安装 Grpc.Net.Client.Web。之后,使用中间件。

    app.UseGrpcWeb();
    

    然后用这个命令替换你的 MapGrpcService。

    endpoints.MapGrpcService<yourgRPCService>().EnableGrpcWeb();
    

    在 ConfigureService 方法中,添加如下命令。

    var handler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, new 
                      HttpClientHandler());
    services.AddGrpcClient<YourService.YourServiceClient>(options =>
    {
        options.Address = new Uri("http://YourServerAddress");
    }).ConfigureChannel(o=> {
        o.HttpClient = new HttpClient(handler);
    });            
    

    现在您应该注入您的 grpc 服务客户端并调用您的方法。

    【讨论】:

      【解决方案3】:

      @poury 救了我的命。这对我有用。 我必须在 ConfigureService 方法中更新我的客户代码并在下面添加代码。 (必填Grpc.Net.Client.Web包)

      services.AddGrpcClient<GreeterService.GreeterServiceClient>(o => { o.Address = new Uri("https://localhost:5001");})
      .ConfigureChannel( o => 
      {
           o.HttpHandler = new GrpcWebHandler(new HttpClientHandler());
      });
      

      还在您的服务器代码上启用了app.UseGrpcWeb()endpoints.MapGrpcService&lt;GreeterService&gt;().EnableGrpcWeb();

      PS:不知道为什么,因为我的客户端也是C#,不是浏览器?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-30
        • 1970-01-01
        • 2018-02-25
        相关资源
        最近更新 更多