繁体   English   中英

自托管 GRPC 服务器

[英]Self hosted GRPC server

我正在尝试从 WCF 过渡到将我们的代码库转移到 .NET Core。 我们的服务目前都托管为 Windows 服务,因此我也尝试自托管 gRPC 服务(而不是构建AspNetCore应用程序)。 我已经成功地使用Grpc.Core.Server和客户端以及Grpc.Net.Client.GrpcChannel构建了一个服务器,请参阅下面的代码片段以供参考。

服务器:

  var builder = ServerServiceDefinition.CreateBuilder();
  // Binder is a small class ripped from the CodeFirst example
  var binder = new Binder();
  binder.Bind(builder, serviceType, service: serv);
  var serverServiceDefinition = builder.Build();

  var server = new Grpc.Core.Server
  {       
    Services = { serverServiceDefinition },
    Ports = { new ServerPort(host, port, ServerCredentials.Insecure) }
  };

  server.Start();

客户:

  var channel = GrpcChannel.ForAddress(Uri, new GrpcChannelOptions()
  {
    //HttpHandler = new GrpcWebHandler(new System.Net.Http.HttpClientHandler())
  });
  var service = channel.CreateGrpcService<TService>();

但是,由于我们的应用程序仍在.Net Framework 4.8中运行,因此在测试此代码时出现运行时异常:

System.PlatformNotSupportedException :gRPC 需要在不支持基于 HTTP/2 的 gRPC 的 .NET 实现上进行额外配置。 必须使用 GrpcChannelOptions.HttpHandler 指定 HTTP 提供程序。配置的 HTTP 提供程序必须支持 HTTP/2 或配置为使用 gRPC-Web。 有关详细信息,请参阅https://aka.ms/aspnet/grpc/netstandard

这导致我在客户端添加Grpc.Net.Client.Web.GrpcWebHandler以根据错误中的链接切换到Grpc-web

但是,我现在正在努力为服务器做等效的事情以支持Grpc-web 此处的指南建议 (1) 使用Grpc.AspNetCore.Web或 (2) 使用“Envoy 代理”来获取支持它的服务器。 (1) 的问题是我没有使用AspNetCore所以我认为这个解决方案不合适,而且我在简单的 C# 解决方案中找不到任何轻量级/简单的方法来执行 (2)。

如果没有添加服务器端支持,我会收到此异常:

Grpc.Core.RpcException : Status(StatusCode="Internal", Detail="Errorstarting gRPC call. HttpRequestException: 发送请求时出错。WebException: 服务器违反了协议。Section=ResponseStatusLine", DebugException="System .Net.Http.HttpRequestException:发送请求时出错。

我认为这显然与服务器不支持Grpc-web请求有关。 所以我现在在这方面处于一个死胡同。 我觉得我需要弄清楚如何自托管AspNetCore服务器并转移到它而不是Grpc.Core.Server ,这将打开选项(1),但我发现几乎没有证据实际上是可能的。

所以我想我的主要问题是:有没有办法在通过Grpc.Core.Server托管的服务器中支持Grpc-web客户端?

如果答案是否定的--> 如何自托管支持Grpc-web客户端的 GRPC 服务器?

根据这个入门指南,我发现了protobuf-net.Grpc.Native似乎可以解决我目前protobuf-net.Grpc.Native的问题。 我还发现我的[DataContract]缺少一个默认构造函数,我认为这与我收到的错误无关,但可能是有贡献的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM