【译】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注入在接收用户输入的接 ...
随机推荐
- 谈谈IT圈的门槛与学历的关系以及如何避免青春饭?
一.关于我自己 我是一名80后的IT老兵,从今年出现疫情后,就感觉多少有些力不从心了,因为公司的业务做的不好,公司是做普惠金融的,疫情出现后,催收逾期就非常厉害,导致公司不敢大量放贷,从而就出现了公司 ...
- Python Ethical Hacking - Basic Concetion
What is Hacking? Gaining unauthorized access. Hackers? 1.Black-hat Hackers 2.White-hat Hackers 3.Gre ...
- Ethical Hacking - GAINING ACCESS(6)
Server Side Attack Analysing scan results and exploiting target system. Go to the Analysis page and ...
- win7下建立docker共享文件夹
前言 建立本机(win7)和VirtualBox中docker虚拟机的共享文件夹,注:下面的命令都是以root身份运行的,使用sudo -i切换到root身份,如无法切换,请自行在命令前加上sudo命 ...
- JAVA 面向对象 三大特征:继承
什么是继承 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可. 多个类可以称为子类,单独这个类称为父类.超类或者基类. 子类可以直接访 ...
- 搞定 CompletableFuture,并发异步编程和编写串行程序还有什么区别?你们要的多图长文
你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it well enough ...
- Git日常操作指南
git status git add . git commit -m "注释" git stash # 每次 push 前 git pull --rebase // 如果有冲突,解 ...
- 2018年5月15日临下班前找的一个读取assets下数据库的例子
网页 https://blog.csdn.net/li12412414/article/details/51958774 @Override protected void onCreate(Bun ...
- pip安装第三方包超时
1. pip安装requests模块超时 [root@2 zabbix_agentd.d]# pip install requests Collecting requests /usr/lib/pyt ...
- SpringBoot2 整合MinIO中间件,实现文件便捷管理
本文源码:GitHub·点这里 || GitEE·点这里 一.MinIO简介 1.基础描述 MinIO是一个开源的对象存储服务.适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器 ...