
今天給大家翻譯一篇由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.AspNetCore.Web –將gRPC-Web支持添加到ASP.NET Core gRPC服務,
- Grpc.Net.Client.Web –在.NET呼叫gRPC-Web端點
可以在此處找到將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
翻譯作者:依樂祝
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/63601.html
標籤:其他
上一篇:asp.net core 3.x 身份驗證-3cookie身份驗證原理
下一篇:【WPF學習】第四十二章 透明
