简介:Blazor WebAssembly与ASP.NET Core、gRPC结合的前后端示例工程,面向希望借助gRPC提升通信效率并复用代码的.NET开发人员。项目通过.proto文件统一定义接口契约,自动生成客户端与服务端代码,降低手工维护成本;其中WeatherService提供虚拟天气数据,Api层作为一元gRPC网关,Web.Client与Web.Server分别承载Blazor客户端和宿主服务。压缩包共59个文件,以.cs源码、.json配置、.razor组件、.csproj工程文件为主体,另含.proto契约、Dockerfile、docker-compose编排及证书、样式等辅助文件,包体约235KB,整体结构清晰,适合按模块对照学习。示例对应较典型的gRPC-Web接入场景,对理解Blazor调用gRPC后端、服务网关拆分以及容器化部署均有直接帮助,已有306人学习浏览。虽然项目标记为存档,但其代码组织方式与proto优先的开发流程仍有借鉴价值。 Blazor WebAssembly 这个技术栈,从 .NET Core 3.0 时代我就开始关注,前前后后也跟进了好几个版本,直到 .NET 8 才算真正走到了“可以放心用于正式项目”的阶段。最近在给团队内部的一个管理系统做架构调整,后端接口想统一走 gRPC,结果一调研就碰上了那个绕不开的问题:浏览器端没法直接跑原生 gRPC 协议,必须用 gRPC-Web。折腾调研加落地,最后沉淀出一个 BlazorGrpc 示例项目,把 Blazor WebAssembly 调用 gRPC 的完整链路跑通了,包括服务端中间件配置、proto 契约共享、客户端 Channel 构建和页面调用。
这篇文章就把整个示例项目的核心内容拆开讲清楚:为什么浏览器端不能用原生 gRPC、proto 契约要怎么定义和共享、服务端如何配置 gRPC-Web、Blazor WebAssembly 客户端怎么对接,以及我实际踩过的几个典型坑。适合正在评估 Blazor WebAssembly 做内部管理系统、或者想把现有 .NET 服务从 REST 迁移到 gRPC 接口的团队,先跑通这个示例,再决定要不要引入到正式项目里。
1. 为什么浏览器端必须走 gRPC
本文还有配套的精品资源,点击获取