天天看點

.net中調用esb_微軟釋出gRPCWeb實作,可直接在浏覽器端調用gRPC服務

.net中調用esb_微軟釋出gRPCWeb實作,可直接在浏覽器端調用gRPC服務

作者 | Arthur Casals 策劃 | Tina 最近,微軟釋出了.NET 的 gRPC-Web 協定實作。該元件最初是作為一個實驗特性,現在是 grpc-dotnet 項目的一部分。有了該元件,就可以在浏覽器中使用 gRPC,Web 應用程式可以不通過 HTTP 代理伺服器直接與 gRPC 服務通信。

gRPC 最初由谷歌開發,是一個高性能遠端過程調用架構,基于 HTTP/2 實作。但由于浏覽器沒有直接暴露 HTTP/2,是以 Web 應用程式不能直接使用 gRPC。gRPC- Web 是一個标準化協定,它解決了這個問題,可以在浏覽器中使用 gRPC。

今年早些時候,微軟宣布将 gRPC-Web 作為一個實驗項目。當時,ASP.NET Core 首席軟體工程師 James Newton-King 表示該項目并不是一個正式項目:

我們想測試一下我們的 gRPC-Web 實作,并擷取回報,看看與使用代理相比,這種方法對.NET 開發人員來說是否有用。

第一個 gRPC-web 實作是在 2018 年作為一個 JavaScript 庫釋出的,Web 應用程式可以通過它直接與 gRPC 服務通信,無需使用 HTTP 伺服器作為代理。其原理是建立與 HTTP/1.1 和 HTTP/2 相容的端到端 gRPC 管道,然後浏覽器發送正常的 HTTP 請求,位于浏覽器和伺服器之間的 gRPC-Web 代理對請求和響應進行轉換。與 gRPC 類似,gRPC-Web 在 Web 用戶端和後端 gRPC 服務之間使用預定義的契約。Protocol Buffers 被用來序列化和編碼消息 (盡管也可以使用其他編碼器)。

.net中調用esb_微軟釋出gRPCWeb實作,可直接在浏覽器端調用gRPC服務

圖檔來源:gPRC 官網

有了這個新元件,.NET Blazor WebAssembly 應用程式和 JavaScript SPA 就可以從在浏覽器裡直接調用 ASP.NET Core gRPC 應用程式。他們還提供了一個替代在 IIS 和 Azure App Service 伺服器上托管 ASP.NET Core gRPC 應用程式的方案,因為它們目前都不能托管 gRPC 服務。

不過,在浏覽器端使用 gRPC-Web 調用 gRPC 服務存在一些限制:不支援用戶端流和雙向流調用,并且跨域調用 gRPC 服務需要在伺服器端配置 CORS。另外,gRPC 伺服器端必須配置為支援 gRPC-Web,或者必須有第三方服務代理 (例如 Envoy) 在浏覽器和伺服器之間對調用進行轉換。

在新的版本中,微軟更新了原始的項目文檔,并公開了一個 gRPC-Web示例應用程式。gRPC-Web 在 NuGet 上有兩個獨立的包:Grpc.AspNetCore.Web(向 ASP.NET Core gRPC 服務添加 gRPC-Web 支援) 和 gRPC.NET.Client.Web(可在.NET 中調用 gRPC-Web 端點)。該元件需要 3.1 或更高版本的.NET Core SDK,可在 Visual Studio 2019(16.4 或更高版本)、Visual Studio Code 和 Visual Studio for Mac(8.4 或更高版本) 中使用。

更多有關 gRPC-Web 的資訊:

https://grpc.io/blog/grpc-web-ga/#advantages-of-using-grpc-web

原文連結

https://www.infoq.com/news/2020/06/microsoft-releases-grpc-web-net/

點個在看少個 bug ?