【译】gRPC-Web for .NET now available
.NET 的 gRPC-Web 现在正式发布了。我们在一月份发布了实验版,从那时起,我们就根据早期的用户反馈进行着改进。
有了这个版本,gRPC-Web 就变成了 grpc-dotnet 项目的一个完全受支持的组件,它已经准备就绪。现在可以通过 gRPC-Web 和 .NET 在浏览器中使用 gRPC。
开始吧
刚接触 gRPC 的开发者,应该学习下微软的《教程:在 ASP.NET Core 中创建 gRPC 客户端和服务器》,该教程介绍如何使用 .NET 创建一个 gRPC client 和 server。
如果你已经有一个 gRPC 应用,那么《在浏览器应用中使用 gRPC》将展示如何将 gRPC-Web 添加到 .NET gRPC server。
gRPC 和 gRPC-Web 是什么
gRPC 是一个现代的高性能 RPC(Remote Procedure Call)框架。gRPC 基于 HTTP/2、Protocol Buffers 和其他基于标准的现代技术。gRPC 是一种开放标准,受到许多编程语言的支持,包括 .NET。
目前在浏览器中实现 gRPC HTTP/2 规范是不可能的,因为没有对请求进行足够细粒度控制的浏览器API。gRPC-Web 是一个标准化的协议,它解决了这个问题,并使 gRPC 在浏览器中可用。 gRPC-Web 为现代浏览器应用程序带来了许多 gRPC 的优秀特性,比如较小的二进制消息和 contract-first 的 API。
gRPC-Web的新机遇
gRPC-Web 旨在使 gRPC 在更多的场景中可用,包括:
- 从浏览器调用 ASP.NET Core gRPC 应用——浏览器 API 不能调用gRPC HTTP/2。gRPC-Web 提供了一个兼容的替代方案。
- JavaScript SPAs
- .NET Blazor Web Assembly 应用
- 在 IIS 和 Azure App Service 中的 Host ASP.NET Core gRPC 应用——一些服务器,如 IIS 和 Azure App Service,目前不能托管 gRPC 服务。虽然这方面的工作正在积极进行,但 gRPC-Web 提供了一个有趣的替代方案,可以在当今的每个环境中工作。
- 从非 .NET Core 平台调用 gRPC——HttpClient 在所有 .NET 平台上不支持 HTTP/2。gRPC-Web 可以用来调用 Blazor 和 Xamarin 的 gRPC 服务。
- 从浏览器调用 ASP.NET Core gRPC 应用——浏览器 API 不能调用gRPC HTTP/2。gRPC-Web 提供了一个兼容的替代方案。

(gRPC 是 Linux 基金会的注册商标。Blazor 兼容 gRPC-WEB。)
我们已经与 Blazor 团队合作,使 gRPC-Web 在 Blazor WebAssembly 应用程序中使用时具有良好的端到端开发体验。gRPC 工具不仅会自动生成强类型的客户端,让你从 Blazor 应用程序中调用 gRPC 服务,而且 gRPC 比 JSON 提供了显著的性能优势。
性能优势的一个很好的例子就是 Blazor 的默认模板应用程序。使用 gRPC 代替 JSON 时,获取数据页面上传输的数据减少了一半。数据大小从627字节减少到309字节。

这里的性能提高来自于 gRPC 比传统的基于文本的 JSON 高效的二进制序列化。gRPC-Web 是改进基于浏览器的富应用程序的一个令人兴奋的机遇。
尝试下
有关 gRPC-Web 的更多信息,请查看文档,或尝试使用 gRPC-Web 的示例应用程序。
.NET 的 gRPC-Web 已经在 NuGet 上发布了:
Grpc.AspNetCore.Web ——添加 gRPC-Web 支持到一个 ASP.NET Core gRPC 服务。
Grpc.Net.Client.Web ——从 .NET 调用 gRPC-Web 终结点
我们期待看到你用 .NET、gRPC 和现在的 gRPC-Web 所创造的东西!
原文链接
【译】gRPC-Web for .NET now available的更多相关文章
- Blazor WebAssembly + Grpc Web = 未来?
Blazor WebAssembly是什么 首先来说说WebAssembly是什么,WebAssembly是一个可以使C#,Java,Golang等静态强类型编程语言,运行在浏览器中的标准,浏览器厂商 ...
- [译] 在Web API 2 中实现带JSON的Patch请求
原文链接:The Patch Verb in Web API 2 with JSON 我想在.NET4.6 Web API 2 项目中使用Patch更新一个大对象中的某个字断,这才意识到我以前都没有用 ...
- Entity Framework 6 Recipes 2nd Edition(9-1)译->用Web Api更新单独分离的实体
第九章 在N层结构的应用程序中使用EF 不是所有的应用都能完全地写入到一个单个的过程中(就是驻留在一个单一的物理层中),实际上,在当今不断发展的网络世界,大量的应用程序的结构包含经典的表现层,应用程, ...
- [译] 在Web Forms 中使用ASP.NET Routing
本文将以最少的代码想你展示一下的效果: 自定义RUL而不依赖于物理文件名. 使用标记或者代码产生基于route 参数的URL . 如何获得标记或者代码路由过来的参数. 创建Routes void Ap ...
- (译)Web是如何工作的(3):HTTP&REST
原文地址:https://medium.freecodecamp.org/how-the-web-works-part-iii-http-rest-e61bc50fa0a 我们在第一篇文章中介绍了 ...
- (译)Web是如何工作的(2):客户端-服务器模型,以及Web应用程序的结构
原文地址:https://medium.freecodecamp.org/how-the-web-works-part-ii-client-server-model-the-structure-of- ...
- (译)Web是如何工作的:给Web开发新手的初级读物
原文地址:https://medium.freecodecamp.org/how-the-web-works-a-primer-for-newcomers-to-web-development-or- ...
- 进行API开发选gRPC还是HTTP APIs?
上一篇文章我带着大家体验了一把<ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)>,如果有兴趣的可以点击链接进行查看,相信跟着做的你,也是可以跑起来的.这篇文章我们将一 ...
- Visual Studio 2013 Web开发新特性
微软正式发布Visual Studio 2013 RTM版,微软还发布了Visual Studio 2013的最终版本..NET 4.5.1以及Team Foundation Server 2013. ...
- WEB安全:SQL注入
SQL注入是站点和web应用程序中最常见的安全漏洞. 这样的恶意技术有非常多应用场景, 但(SQL注入)一般是指在数据输入的地方注入代码以利用数据库应用程序中的安全漏洞. SQL注入在接收用户输入的接 ...
随机推荐
- Python Ethical Hacking - Malware Analysis(3)
Stealing WiFi Password Saved on a Computer #!/usr/bin/env python import smtplib import subprocess im ...
- ES6语法——let和const
一.let 1.定义 ES6新增了let命令,用来声明变量,用法类似于var,但是和var有一定的区别 2.let只在块级作用域内有效 首先来看一个比较简单的例子,请告诉我,他们分别输出什么 //代码 ...
- 学会Markdown不仅可以用来编写文档,还可以制作自己的简历,真香!
程序员的简历要简洁明了,不要太多花哨的修饰,突出重点即可,使用markdown就可以很好的满足写一份简历的需求 Markdown 简历模板 这里我贡献一下我自己的markdown简历模板,简历效果如下 ...
- 二分图&网络流初步
链接 : 最小割&网络流应用 EK太低级了,不用. 那么请看:#6068. 「2017 山东一轮集训 Day4」棋盘,不用EK你试试? dinic模板及部分变形应用见zzz大佬的博客:网络流学 ...
- vue 修改路由
直接放代码: this.$router.push({ path: "/login" });
- 【vagrant】第一次安装添加box报错:The box failed to unpackage properly....
报错信息 The box failed to unpackage properly. Please verify that the box file you're trying to add is n ...
- laravel 缓存相关常用操作
//----------设置缓存----------- //Cache::put($key,$val,$minutes); 如果$key已存在,则覆盖原有值 Cache::put('name', '张 ...
- PHP connection_aborted() 函数
实例 创建一个函数(check_abort()),在客户机终止脚本时写入一条日志消息: <?phpfunction check_abort(){if (connection_aborted()) ...
- ABC 158 F - Removing Robots dp 单调栈
LINK:Removing Robots 没想到 自闭. 考虑了一个容斥 发现不合法方案难以计算. 就算可以计算也几乎是n^2的做法. 考虑dp 左边会对右边产生影响 所以考虑先dp右边的再考虑左边的 ...
- 可笑,你竟然不知道 Java 如何生成 UUID
先看再点赞,给自己一点思考的时间,微信搜索[沉默王二]关注这个靠才华苟且的程序员.本文 GitHub github.com/itwanger 已收录,里面还有一线大厂整理的面试题,以及我的系列文章. ...