ASP.NETチーフ開発エンジニアによる翻訳に今日ジェームズ・ニュートン・キングが、数日前にブログを公開し、論文は実験的製品gRPC-ウェブをもたらしました。あなたはフィードバックを関連ディスカッションスレッドの最後にテキストをクリックすることができます。私は記事の最後に記述のリンクを提供します。:次のようにすべての翻訳は、
私は、.NETによるgRPC、Web用に発表実験的サポートを嬉しく思います。gRPC-ウェブ(例えばJavaScriptのSPAまたはBlazor WebAssemblyアプリケーションなど)gRPCブラウザベースのアプリケーションからの呼び出しを可能にします。
.NETのgRPC-Webがブラウザアプリケーションを導入gRPC多くの優れた機能に取り組んでいます。
- 強く型付けされたコード生成クライアント
- コンパクトいるProtobufニュース
- サービスフロー
gRPC-ウェブとは何ですか
何のHTTPリクエストが十分にきめ細かく制御することはできませんので、ブラウザでgRPC HTTP / 2仕様、ブラウザのAPIを達成することはできません。gRPC-ウェブ HTTP / 1.1およびHTTP / 2との互換性により、この問題を解決します。
gRPC-Webが新しい技術ではありません。そこ安定しているgRPC-ウェブJavaScriptクライアント、およびプロキシはgRPCとWeb-gRPC間の変換に使用。新しい実験的なパッケージには、ASP.NETコアgRPCアプリケーションがサポートを可能にしませプロキシとgRPC-Webおよび.NETのコアgRPCクライアントはgRPC、Webサービスを呼び出すことができます。(非常に適しBlazor WebAssemblyアプリ!)
新しいシーンを使用してGRPC、ウェブ
ブラウザからASP.NETコアgRPCアプリケーションを呼び出します
- ブラウザのAPIはgRPC HTTP / 2を呼び出すことはできません。gRPC-ウェブは、互換性の代替手段を提供します。
- 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.AddGrpc();
}
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
翻译作者:依乐祝