1. 创建 gRPC 服务
- VSCode 打开准备用来存放项目文件夹的文件夹;
- VSCode 中打开终端,运行命令:
dotnet new grpc -o grpc-service-web code -r grpc-service-web
- 当对话框询问是否要将所需资产添加到项目时,选择“是”。
2. 修改服务配置,以支持 Web 调用
gRPC-Web 允许浏览器 JavaScript 应用调用 gRPC 服务,配置方法如下:
- Program.cs 文件中,添加引用:
using Microsoft.AspNetCore.Server.Kestrel.Core; using System.Net;
- Program.cs 文件中,找到 CreateHostBuilder() 函数,用下面代码替换:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.ConfigureKestrel(options => { // Setup a Http1AndHttp2 endpoint without TLS. IPAddress ip = Dns.GetHostAddresses("172.22.113.93")[0]; options.Listen(ip, 5000, o => o.Protocols = HttpProtocols.Http1AndHttp2); }); webBuilder.UseStartup<Startup>(); });
- 在终端中,运行如下命令(添加对 Grpc.AspNetCore.Web 包的引用):
dotnet add grpc-service-web.csproj package Grpc.AspNetCore.Web
- 打开 Startup.cs 文件,找到 ConfigureServices() 函数,用下面的代码替换:
public void ConfigureServices(IServiceCollection services) { services.AddGrpc(); services.AddCors(o => o.AddPolicy("AllowAll", builder => { builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .WithExposedHeaders("Grpc-Status", "Grpc-Message", "Grpc-Encoding", "Grpc-Accept-Encoding"); })); }
- 打开 Startup.cs 文件,找到 Configure() 函数,用下面的代码替换:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); app.UseGrpcWeb(new GrpcWebOptions { DefaultEnabled = true }); app.UseCors(); app.UseEndpoints(endpoints => { endpoints.MapGrpcService<GreeterService>().RequireCors("AllowAll"); endpoints.MapGet("/", async context => { await context.Response.WriteAsync("Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909"); }); }); }
3. 运行服务
- 在终端中,运行命令:
dotnet run
- 输出如下:
注1:Win10 之前的操作系统(macOS、Win7 等)不支持 TLS;
注2:基于浏览器的应用 不支持 http2 。
参考:在 ASP.NET Core 中创建 gRPC 客户端和服务器
无法在 Win7/macOS 上启动 ASP.NET Core gRPC 应用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗