受欢迎的博客标签

ASP.NET Core Blazor 3.x(Server-side)-Calling gRPC Services

Published

服务间通信方式可选方案

服务间的通信方式需要做出一个最基本的决策,可选方案:

WCF

WebService

Restful API

gRPC

gRPC-Web

SignalR

c# 使用grpc代替WCF .经历过从WebService和WCF,升级到WebApi过程的开发者心里都清楚,RESTful风格是重要原因,但是能流行起来的根本,还是Json的通用性和轻便性。而这些看家本领在gRPC面前不堪一击。

默认的选项是通过 HTTP 发送 JSON,也就是所谓的 REST API。我们也是从 REST 开始的,但最近我们决定改用 gRPC。

gRPC 和 Restful API

gRPC和Restful API都提供了一套通信机制,用于server/client模型通信,而且它们都使用http作为底层的传输协议(严格地说, gRPC使用的http2.0,而Restful api则不一定).

gRPC is a modern high-performance RPC (Remote Procedure Call) framework. gRPC is based on HTTP/2, Protocol Buffers and other modern standard-based technologies. gRPC is an open standard and is supported by many programming languages, including .NET.

HTTP/2 is not supported by HttpClient on all .NET platforms.

1gRPC可以通过protobuf来定义接口,不仅跨语言通用,而且还能严格的接口约束。

2通过protobuf可以将数据序列化为二进制编码,大幅减少数据传输,从而大幅提高性能。

3gRPC可以方便地支持流式通信,依赖于Http2.0,为其所不能为。

除了以上优势,gRPC还有个致命的缺陷,限制了其应用场景,就是浏览器不能直接调用gRPC。然而这个问题现在被gRPC-Web解决了(备注:还有一些限制,如双向流不能支持等)!

gRPC-Web

 Browser APIs can’t call gRPC HTTP/2. gRPC-Web offers a compatible alternative.Call ASP.NET Core gRPC apps from the browser 。

JavaScript SPAs
.NET Blazor Web Assembly apps

即 gRPC for Web Clients。它是一个 JavaScript 库,使 Web 应用程序能够直接与后端 gRPC 服务通信,不需要 HTTP 服务器充当中介。它旨在使 gRPC 在更多情况下可用,包括但不限于一下几种:

.NET 版 gRPC-Web 现已在 NuGet 上发布:

Grpc.AspNetCore.Web ——  将 gRPC-Web 支持添加到 ASP.NET Core gRPC 服务
Grpc.Net.Client.Web ——  从 .NET 调用 gRPC-Web 端点

ASP.NET Core gRPC-Web

 

Useful links

前端 JS/TS 调用 ASP.NET Core gRPC-Web

https://zhuanlan.zhihu.com/p/105868095

gRPC-Web for .NET now available

 

.Net core

Calling gRPC Services With Server-side Blazor

Implementing Microservices with gRPC and .NET Core 3.1