相关疑难解决方法(0)

具有未加密 HTTP2 连接的 .Net Core 3.1 gRPC 客户端

我正在尝试查询一些在 HTTP 上运行的本地 gRPC 服务。这是我的 net core 3.1 控制台应用程序:

static async Task Main(string[] args)
{
    AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);

    using var channel = GrpcChannel.ForAddress("http://localhost:16050");
    var client = new EventService.EventServiceClient(channel);
    var reply1 = await client.GetTrackEventAsync(new GetTrackEventRequest { Name = "01Austra14" });
}
Run Code Online (Sandbox Code Playgroud)

但它抛出了这个错误:

System.Private.CoreLib.dll 中发生“Grpc.Core.RpcException”类型的异常,但未在用户代码中处理:“Status(StatusCode=”Internal”, Detail=”启动 gRPC 调用时出错。HttpRequestException: 发生错误发送请求时。Http2ConnectionException:HTTP/2 服务器在连接上发送了无效数据。HTTP/2 错误代码“PROTOCOL_ERROR”(0x1)。”,DebugException =“System.Net.Http.HttpRequestException:发送时发生错误请求。 ---> System.Net.Http.Http2ConnectionException: HTTP/2 服务器在连接上发送了无效数据。HTTP/2 错误代码“PROTOCOL_ERROR”(0x1)。

不幸的是,目前我们无法添加 SSL 证书,我们需要暂时使用纯 HTTP(服务应用程序尚未投入生产)。有人知道这里发生了什么吗?

根据文档,调用AppContext.SetSwitch应该足够了。

服务器是一个 Asp Net Core 3.1 应用程序。它运行于:

  • 端口 http://*:16050
  • 端口 https://*:16150。这会正确回复客户端,但如上所述,目前只能在本地使用

服务器提供

  • Http1 和 Http2
  • 同一端口上的 …

c# .net-core grpc asp.net-core

8
推荐指数
1
解决办法
8155
查看次数

Grpc.Core.RpcException: 'Status (StatusCode = "不可用", Detail = "启动 gRPC 调用时出错

如果您能告诉我导致问题的原因以及如何解决它,我将不胜感激。

\n

PS 抱歉发布所有代码,只是我不确定哪个确切部分与问题相关。

\n

以下是异常的全文:

\n
\n

Grpc.Core.RpcException: 'Status (StatusCode = "不可用", Detail = "启动 gRPC 调用时出错。HttpRequestException: 未建立连接,因为目标计算机拒绝了连接请求。SocketException: 未建立连接。目标计算机拒绝了连接请求。", DebugException = "System.Net.Http.HttpRequestException: 由于目标计算机拒绝了连接请求,因此未建立连接。\n\xe2\x80\x94-> System.Net.Sockets.SocketException ( 10061): 连接未建立,因为目标计算机拒绝了连接请求。\nat System.Net.Http.ConnectHelper.ConnectAsync (String host, Int32 port, CancellationToken CancellationToken)\n\xe2\x80\x94- 内部异常堆栈结束跟踪\xe2\x80\x94-\nat System.Net.Http.ConnectHelper.ConnectAsync(字符串主机,Int32端口,CancellationToken取消令牌)\nat System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage请求,布尔值allowHttp2,CancellationToken取消令牌) \nat System.Net.Http.HttpConnectionPool.GetHttp2ConnectionAsync(HttpRequestMessage 请求,CancellationToken CancelationToken)\nat System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage 请求,布尔 doRequestAuth,CancellationToken CancellationToken)\nat System.Net.Http.RedirectHandler.SendAsync (HttpRequestMessage 请求,CancellationToken CancellationToken)\nat Grpc.Net.Client.Internal.GrpcCall 2.RunCall (HttpRequestMessage request, Nullable1 超时) ") '

\n
\n

这是服务器代码:

\n

程序.cs

\n
using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\n\nnamespace GrpcHostServer\n{\n    public class Program\n    {\n        public static void …
Run Code Online (Sandbox Code Playgroud)

c# visual-studio grpc asp.net-core worker-service

6
推荐指数
1
解决办法
2万
查看次数