一個新實驗:使用gRPC-Web從瀏覽器調用.NET gRPC服務

来源:https://www.cnblogs.com/yilezhu/archive/2020/02/15/12313870.html
-Advertisement-
Play Games

今天給大家翻譯一篇由ASP.NET首席開發工程師 "James Newton King" 前幾天發表的一篇博客,文中帶來了一個實驗性的產品gRPC Web。大家可以點擊文末的討論帖進行相關反饋。我會在文章末尾給出原文鏈接。全部譯文如下: 我很高興宣佈通過.NET對gRPC Web進行實驗性支持。gR ...


今天給大家翻譯一篇由ASP.NET首席開發工程師James Newton-King前幾天發表的一篇博客,文中帶來了一個實驗性的產品gRPC-Web。大家可以點擊文末的討論帖進行相關反饋。我會在文章末尾給出原文鏈接。全部譯文如下:
我很高興宣佈通過.NET對gRPC-Web進行實驗性支持。gRPC-Web允許從基於瀏覽器的應用程式(例如JavaScript SPA或Blazor WebAssembly應用程式)調用gRPC。

.NET的gRPC-Web承諾將gRPC的許多出色功能引入瀏覽器應用程式:

  • 強類型代碼生成的客戶端
  • 緊湊的Protobuf消息
  • 服務流

什麼是gRPC-Web

無法在瀏覽器中實現gRPC HTTP / 2規範,因為沒有瀏覽器API能夠對HTTP請求進行足夠的細粒度控制。gRPC-Web通過與HTTP / 1.1和HTTP / 2進行相容來解決此問題。

gRPC-Web不是一項新技術。已經有一個穩定的gRPC-Web JavaScript客戶端,以及一個用於在gRPC和gRPC-Web之間進行轉換的代理 。新的實驗性程式包允許ASP.NET Core gRPC應用程式支持帶代理的gRPC-Web ,並允許.NET Core gRPC客戶端調用gRPC-Web服務。(非常適合Blazor WebAssembly應用!)

使用gRPC-Web的新場景

  • 從瀏覽器調用ASP.NET Core gRPC應用程式

    –瀏覽器API無法調用gRPC HTTP / 2。gRPC-Web提供了一個相容的替代方案。

    • JavaScript SPA
    • .NET Blazor Web Assembly應用
  • 在IIS和Azure App Service中托管ASP.NET Core gRPC應用程式 –某些伺服器(例如IIS和Azure App Service)當前無法托管gRPC服務。在積極研究這一問題的同時,gRPC-Web提供了一種有趣的替代方案,可在當今的每個環境中使用。

  • 從非.NET Core平臺調用gRPC –一些.NET平臺HttpClient不支持HTTP / 2。gRPC-Web可用於在這些平臺(例如Blazor WebAssembly,Xamarin)上調用gRPC服務。

請註意,gRPC-Web的性能成本較低,並且不再支持兩個gRPC功能:客戶端流和雙向流。(仍然支持服務端流!)

服務端gRPC-Web說明

如果您是.NET中gRPC的新手,那麼這裡有一個簡單的入門指南

gRPC-Web不需要對服務進行任何更改,唯一的修改是啟動配置。要在ASP.NET Core gRPC服務中啟用gRPC-Web,請添加對Grpc.AspNetCore.Web包的引用。通過在啟動文件中添加AddGrpcWeb(...)UseGrpcWeb(),將應用程式配置為使用gRPC-Web :

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpcWeb();
}

public void Configure(IApplicationBuilder app)
{
    app.UseRouting();

    // Add gRPC-Web middleware after routing and before endpoints
    app.UseGrpcWeb();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGrpcService<GreeterService>().EnableGrpcWeb();
    });
}

從瀏覽器調用gRPC-Web可能需要一些其他配置,例如將應用程式配置為支持CORS。

客戶端gRPC-Web說明

JavaScript的gRPC的Web客戶端有關於設置gRPC Web客戶端以在瀏覽器JavaScript SPAs中使用的說明

使用.NET客戶端調用gRPC-Web與常規gRPC相同,唯一的修改是創建通道的方式。要啟用gRPC-Web,請添加對Grpc.Net.Client.Web包的引用。配置通道以使用GrpcWebHandler

// Configure a channel to use gRPC-Web
var handler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler());
var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
    {
        HttpClient = new HttpClient(handler)
    });

var client = Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new GreeterRequest { Name = ".NET" });

要查看運行.NET的gRPC-Web,請花點時間閱讀由Steve Sanderson撰寫的精彩博客,該博客在Blazor WebAssembly中使用gRPC-Web

立即嘗試在ASP.NET Core中使用gRPC-Web

NuGet上的預覽包:

可以在此處找到將gRPC-Web與.NET Core一起使用的文檔。

.NET的gRPC-Web是一個實驗性項目,而不是穩定發佈的產品。我們想測試一下我們實現gRPC-Web的方法是否有效,並獲得反饋,與通過代理設置gRPC-Web的傳統方法相比,該方法對.NET開發人員是否有用。大家可以在https://github.com/grpc/grpc-dotnet上添加使用反饋,以確保我們構建出開發人員喜歡並能發揮作用的東西。

謝謝!

原文鏈接:https://devblogs.microsoft.com/aspnet/grpc-web-experiment/

原文作者:James Newton-King

翻譯作者:依樂祝


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 楔子 作為一個會寫函數的python開發,我們從今天開始要去公司上班了。寫了一個函數,就交給其他開發用了。 def func1(): print('in func1') 季度末,公司的領導要給大家發績效獎金了,就提議對這段日子所有人開發的成果進行審核,審核的標準是什麼呢?就是統計每個函數的執行時間。 ...
  • 楔子 假如有一個函數,實現返回兩個數中的較大值: def my_max(x,y): m = x if x>y else y return mbigger = my_max(10,20)print(bigger) 之前是不是我告訴你們要把結果return回來你們就照做了?可是你們有沒有想過,我們為什麼 ...
  • 好久時間沒有做Django的項目了,今天創建項目竟然報Non-zero exit code(1)錯誤 查明原因是因為pip不是最新版本,需要執行以下命令:python -m pip install --upgrade pip 但還是沒有成功,提示超時,估計源有問題 使用豆瓣源進行安裝,問題解決了 命 ...
  • 前言最近由於疫情被困在家,於是準備每天看點專業知識,準備寫成博客,不定期發佈。博客大概會寫5~7篇,主要是“解剖”一些深度學習的底層技術。關於深度學習,電腦專業的人多少都會瞭解,知道Conv\Pool的過程,也看過論文,做過實驗或是解決方案。在寫的各種捲積網路 時候,有沒有問問自己:這些網路到底是... ...
  • 為什麼要用函數 現在python屆發生了一個大事件,len方法突然不能直接用了。。。 然後現在有一個需求,讓你計算'hello world'的長度,你怎麼計算? 這個需求對於現在的你其實不難,我們一起來寫一下。 s1 = "hello world" length = 0 for i in s1: l ...
  • 慕課網-悟空-玩轉Java併發工具,精通JUC,成為併發多面手-筆記 微雲:https://share.weiyun.com/81aa12bb98016e200add31fb8e191cdf百度網盤:鏈接:https://pan.baidu.com/s/1IiClTkQwFJgBL2NqlptKbA ...
  • 一、前言 從學單片機開始鼓搗C語言,到現在為了學CV鼓搗Python,期間在CSDN、簡書、博客園和github這些地方得到了很多幫助,所以也想把自己做的一些小東西分享給大家,希望能幫助到別人。記錄人生的第一篇博客,mark。 二、圖像檢測步驟 1. 讀取兩張圖片 第一張是需要檢測的小物體,第二章圖 ...
  • 多態的體現 父類的引用指向了自己的子類對象。 父類的引用也可以接受自己的子類對象。 代碼體現 運行結果 多態的前提 必須是類與類之間有關係。要麼是繼承關係,要麼實現。 存在覆寫關係。 多態利弊 利處 多態的出現大大地提高了程式的拓展性。 弊端 提高了拓展性,但是只能使用父類的引用訪問父類中的成員,不 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...