簡體   English   中英

.net 不支持 Grpc 請求協議 'HTTP/1.1'

[英].net Grpc Request protocol 'HTTP/1.1' is not supported

我在 .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。 我究竟做錯了什么?

我有同樣的問題,我已經用 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 服務客戶端並調用你的方法。

感謝您的回復。 閱讀本文后,我意識到我需要將 Grpc-Web 代理添加到我的應用程序中,因為這會將 HTTP/1.1 客戶端消息轉換為 HTTP/2。

本文解釋了客戶端和服務器的代碼添加。

進行這些更改/添加后,我的 gRPC 消息傳遞服務工作正常。 重要的是——我花了很多時間試圖弄清楚如何在我的看漲期權中引用證書——但是沒有證書,消息傳遞也能正常工作。

@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<GreeterService>().EnableGrpcWeb(); 在您的服務器代碼上。

PS:不知道為什么,因為我客戶端也是C#,不是瀏覽器?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM