日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

一个新实验:使用gRPC-Web从浏览器调用.NET gRPC服务

發(fā)布時(shí)間:2023/12/4 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个新实验:使用gRPC-Web从浏览器调用.NET gRPC服务 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天給大家翻譯一篇由ASP.NET首席開(kāi)發(fā)工程師James Newton-King前幾天發(fā)表的一篇博客,文中帶來(lái)了一個(gè)實(shí)驗(yàn)性的產(chǎn)品gRPC-Web。大家可以點(diǎn)擊文末的討論帖進(jìn)行相關(guān)反饋。我會(huì)在文章末尾給出原文鏈接。全部譯文如下:
我很高興宣布通過(guò).NET對(duì)gRPC-Web進(jìn)行實(shí)驗(yàn)性支持。gRPC-Web允許從基于瀏覽器的應(yīng)用程序(例如JavaScript SPA或Blazor WebAssembly應(yīng)用程序)調(diào)用gRPC。

.NET的gRPC-Web承諾將gRPC的許多出色功能引入瀏覽器應(yīng)用程序:

  • 強(qiáng)類型代碼生成的客戶端

  • 緊湊的Protobuf消息

  • 服務(wù)流

什么是gRPC-Web

無(wú)法在瀏覽器中實(shí)現(xiàn)gRPC HTTP / 2規(guī)范,因?yàn)闆](méi)有瀏覽器API能夠?qū)TTP請(qǐng)求進(jìn)行足夠的細(xì)粒度控制。gRPC-Web通過(guò)與HTTP / 1.1和HTTP / 2進(jìn)行兼容來(lái)解決此問(wèn)題。

gRPC-Web不是一項(xiàng)新技術(shù)。已經(jīng)有一個(gè)穩(wěn)定的gRPC-Web JavaScript客戶端,以及一個(gè)用于在gRPC和gRPC-Web之間進(jìn)行轉(zhuǎn)換的代理?。新的實(shí)驗(yàn)性程序包允許ASP.NET Core gRPC應(yīng)用程序支持不帶代理的gRPC-Web ,并允許.NET Core gRPC客戶端調(diào)用gRPC-Web服務(wù)。(非常適合Blazor WebAssembly應(yīng)用!)

使用gRPC-Web的新場(chǎng)景

  • 從瀏覽器調(diào)用ASP.NET Core gRPC應(yīng)用程序

    –瀏覽器API無(wú)法調(diào)用gRPC HTTP / 2。gRPC-Web提供了一個(gè)兼容的替代方案。

    • JavaScript SPA

    • .NET Blazor Web Assembly應(yīng)用

  • 在IIS和Azure App Service中托管ASP.NET Core gRPC應(yīng)用程序?–某些服務(wù)器(例如IIS和Azure App Service)當(dāng)前無(wú)法托管gRPC服務(wù)。在積極研究這一問(wèn)題的同時(shí),gRPC-Web提供了一種有趣的替代方案,可在當(dāng)今的每個(gè)環(huán)境中使用。

  • 從非.NET Core平臺(tái)調(diào)用gRPC?–一些.NET平臺(tái)HttpClient不支持HTTP / 2。gRPC-Web可用于在這些平臺(tái)(例如Blazor WebAssembly,Xamarin)上調(diào)用gRPC服務(wù)。

請(qǐng)注意,gRPC-Web的性能成本較低,并且不再支持兩個(gè)gRPC功能:客戶端流和雙向流。(仍然支持服務(wù)端流!)

服務(wù)端gRPC-Web說(shuō)明

如果您是.NET中g(shù)RPC的新手,那么這里有一個(gè)簡(jiǎn)單的入門(mén)指南。

gRPC-Web不需要對(duì)服務(wù)進(jìn)行任何更改,唯一的修改是啟動(dòng)配置。要在ASP.NET Core gRPC服務(wù)中啟用gRPC-Web,請(qǐng)?zhí)砑訉?duì)Grpc.AspNetCore.Web包的引用。通過(guò)在啟動(dòng)文件中添加AddGrpcWeb(...)和UseGrpcWeb(),將應(yīng)用程序配置為使用gRPC-Web :

Startup.cs

public void ConfigureServices(IServiceCollection services) {services.AddGrpc(); }public void Configure(IApplicationBuilder app) {app.UseRouting();// Add gRPC-Web middleware after routing and before endpointsapp.UseGrpcWeb();app.UseEndpoints(endpoints =>{endpoints.MapGrpcService<GreeterService>().EnableGrpcWeb();}); }

從瀏覽器調(diào)用gRPC-Web可能需要一些其他配置,例如將應(yīng)用程序配置為支持CORS。

客戶端gRPC-Web說(shuō)明

JavaScript的gRPC的Web客戶端有關(guān)于設(shè)置gRPC Web客戶端以在瀏覽器JavaScript SPAs中使用的說(shuō)明。

使用.NET客戶端調(diào)用gRPC-Web與常規(guī)gRPC相同,唯一的修改是創(chuàng)建通道的方式。要啟用gRPC-Web,請(qǐng)?zhí)砑訉?duì)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" });

要查看運(yùn)行.NET的gRPC-Web,請(qǐng)花點(diǎn)時(shí)間閱讀由Steve Sanderson撰寫(xiě)的精彩博客,該博客在Blazor WebAssembly中使用gRPC-Web。

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

NuGet上的預(yù)覽包:

  • Grpc.AspNetCore.Web –將gRPC-Web支持添加到ASP.NET Core gRPC服務(wù)。

  • Grpc.Net.Client.Web?–在.NET調(diào)用gRPC-Web端點(diǎn)

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

.NET的gRPC-Web是一個(gè)實(shí)驗(yàn)性項(xiàng)目,而不是穩(wěn)定發(fā)布的產(chǎn)品。我們想測(cè)試一下我們實(shí)現(xiàn)gRPC-Web的方法是否有效,并獲得反饋,與通過(guò)代理設(shè)置gRPC-Web的傳統(tǒng)方法相比,該方法對(duì).NET開(kāi)發(fā)人員是否有用。大家可以在https://github.com/grpc/grpc-dotnet上添加使用反饋,以確保我們構(gòu)建出開(kāi)發(fā)人員喜歡并能發(fā)揮作用的東西。

謝謝!

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

原文作者:James Newton-King

翻譯作者:依樂(lè)祝

總結(jié)

以上是生活随笔為你收集整理的一个新实验:使用gRPC-Web从浏览器调用.NET gRPC服务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。