随笔 - 216  文章 - 0 评论 - 2 阅读 - 24万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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>();
                    });
    View Code
    复制代码
  • 在终端中,运行如下命令(添加对 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");
                }));
            }
    View Code
    复制代码
  • 打开 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");
                    });
                });
            }
    View Code
    复制代码

     

3. 运行服务

  • 终端中,运行命令:
    dotnet run
  • 输出如下:

   

 

   

 

注1:Win10 之前的操作系统(macOS、Win7 等)不支持 TLS;

注2:基于浏览器的应用 不支持 http2 。

 

参考:在 ASP.NET Core 中创建 gRPC 客户端和服务器

   无法在 Win7/macOS 上启动 ASP.NET Core gRPC 应用

   在浏览器应用中使用 gRPC

 

  

 

posted on   青叶煮酒  阅读(956)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示