从 Web 应用程序调用 .Net Framework gRPC 服务

Calling a .Net framework gRPC service from a web app

我知道可以仅使用 .Net Framework(例如两个控制台应用程序)来设置 gRPC 服务器和客户端方案。也可以设置一个 Web 应用程序客户端(在我的例子中使用 Angular)和一个带有 Grpc.AspNetCore.Web 包的 .Net Core gRPC 服务器应用程序。

但是,当 .Net 框架 gRPC 服务无法与 Grpc.AspNetCore.Web 一起工作时,是否可以从 Web 应用程序调用它?

完整的工作流程是这样的:

  1. 您现有的 protoc 您需要添加 protoc-gen-grpc-web 插件:从 https://github.com/grpc/grpc-web/releases -- configuration options are here: https://github.com/grpc/grpc-web#client-configuration-options

    下载
  2. 你需要启动envoy代理(这不是唯一的选择,但现在似乎是最常用和支持的),配置似乎很复杂,但很冗长.好的起点在这里:https://github.com/grpc/grpc-web/blob/master/net/grpc/gateway/examples/echo/envoy.yaml

  3. JS前端只是使用生成的代码,可以这么简单:https://github.com/grpc/grpc-web#3-write-your-js-client

客户端正在向 Envoy 发送 gRPC-web 请求(因此您在 JS 中创建通常的 gRPC 消息和服务,并将其转换为 HTTP 请求),Envoy 将其转换为常规 gRPC 调用并将其发送到您的 gRPC 服务.响应类似。

Asp.net Core 3.1 为我们提供了一个选项,可以通过网络直接与 grpc 通信,无需 Envoy 作为代理,你只需要 Grpc.AspNetCore.Web 包 2..,我正在使用 2.31.0 https://www.nuget.org/packages/Grpc.AspNetCore.Web