我知道可以仅使用 .Net Framework(例如两个控制台应用程序)设置 gRPC 服务器和客户端场景。还可以使用 Grpc.AspNetCore.Web 包设置 Web 应用程序客户端(在我的情况下使用 Angular)和 .Net Core gRPC 服务器应用程序。
但是,当它不能与 Grpc.AspNetCore.Web 一起使用时,是否可以从 Web 应用程序调用 .Net 框架 gRPC 服务?
我知道可以仅使用 .Net Framework(例如两个控制台应用程序)设置 gRPC 服务器和客户端场景。还可以使用 Grpc.AspNetCore.Web 包设置 Web 应用程序客户端(在我的情况下使用 Angular)和 .Net Core gRPC 服务器应用程序。
但是,当它不能与 Grpc.AspNetCore.Web 一起使用时,是否可以从 Web 应用程序调用 .Net 框架 gRPC 服务?
完整的工作流程是这样的:
对于您现有的protoc
,您需要添加protoc-gen-grpc-web
插件:从https://github.com/grpc/grpc-web/releases下载——配置选项在这里:https ://github.com/grpc/grpc-web#client-配置选项
您需要启动envoy
代理(它不是唯一的选项,但现在它似乎是最常用和支持的),配置似乎很复杂,但它只是冗长。好的起点在这里:https ://github.com/grpc/grpc-web/blob/master/net/grpc/gateway/examples/echo/envoy.yaml
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 为我们提供了通过 web 直接与 grpc 通信的选项,无需 Envoy 作为代理,您只需要 Grpc.AspNetCore.Web 包 2 。,我正在使用 2.31.0 https://www.nuget.org/packages/Grpc.AspNetCore.Web