千家信息网

.Net Core中使用Grpc的方法

发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,这篇文章主要讲解了".Net Core中使用Grpc的方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习".Net Core中使用Grpc的方法"吧!一
千家信息网最后更新 2025年11月06日.Net Core中使用Grpc的方法

这篇文章主要讲解了".Net Core中使用Grpc的方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习".Net Core中使用Grpc的方法"吧!

  一、Grpc概述

  gRPC 基于如下思想:定义一个服务, 指定其可以被远程调用的方法及其参数和返回类型。gRPC 默认使用protocol buffers作为接口定义语言,来描述服务接口和有效载荷消息结构。如果有需要的话,可以使用其他替代方案。

  定义的服务分为4中类型:

  单项 RPC,即客户端发送一个请求给服务端,从服务端获取一个应答,就像一次普通的函数调用。这种最常用。

  服务端流式 RPC,即客户端发送一个请求给服务端,可获取一个数据流用来读取一系列消息。客户端从返回的数据流里一直读取直到没有更多消息为止。

  客户端流式 RPC,即客户端用提供的一个数据流写入并发送一系列消息给服务端。一旦客户端完成消息写入,就等待服务端读取这些消息并返回应答。

  双向流式 RPC,即两边都可以分别通过一个读写数据流来发送一系列消息。这两个数据流操作是相互独立的,所以客户端和服务端能按其希望的任意顺序读写,例如:服务端可以在写应答前等待所有的客户端消息,或者它可以先读一个消息再写一个消息,或者是读写相结合的其他方式。每个数据流里消息的顺序会被保持。

  二、.Net Core中使用Grpc

  使用Grpc 就三步:定义Grpc服务、实现Grpc服务、调用Grpc服务。

  2.1 定义Grpc服务

  1、在VS中选择.Net Core创建类库

  2、引入Google.Protobuf、Grpc.Core包

  3、创建proto文件,定义一个SsmServer服务,服务中提供两个方法,一个最简单的单项RPC方法,一个双向流式RPC。后面这个文件会生成一个同名的C#类文件。


  syntax = "proto3"; //语法指定proto3

  package ShenDa.SSM.Grpc; //后面生成C#文件的命名空间

  import "Protos/Common.proto";

  import "Protos/Health.proto";

  import "Protos/User.proto";//指定定义服务中使用的参数的位置

  service SsmService{

  //健康检查 单项 RPC

  rpc Health(EmptyRequest) returns (HealthResponse){}

  //双向流

  rpc User_Add(stream UserAddRequest) returns(stream UserAddResponse){}

  }


  定义的Health.proto文件


  syntax = "proto3";

  package ShenDa.SSM.Grpc;

  message HealthResponse{ //返回参数

  bool Success=1; //每个字段必须要指定序号

  string Message=2;

  }


  以上服务就定义完成了。现在需要将这个proto文件生成C#文件,可以使用命令,也可以使用工具。在这里我使用工具生成。

  5、引用Grpc.Tools ,然后在工程文件中指定要生成的proto文件。

  生成项目,就会在 obj文件夹中生成对应的C#文件。其他文件都是生成对应的实体类,但是定义的服务的proto文件,比较特殊,它会生成一个同名的类文件,类中包含

  一个抽象类,名称为服务名+Base。其中包含我们定义的虚两个方法

  一个部分类,名称为服务名+Client,继承 ClientBase<服务名Client>

  以上所有的Grpc服务都已经定义完了。因为客户端不可能每个都通过添加应用项目的方式使用,所以我们还需要打包客户端Nuget包。

  6、生成Nuget包,提供给客户端使用

  通过VS设置打包生成Nuget包,生成Grpc客户端Nuget包。

  2.2 实现Grpc服务

  通过VS的GRPC模板创建项目,定义实现类并继承上面生成的抽象类,然后重写我们定义的方法。


  public partial class SsmServiceImpl : SsmService.SsmServiceBase

  {

  public override async Task Health(EmptyRequest request, ServerCallContext context)

  {

  var response = new HealthResponse()

  {

  Message = string.Empty,

  Success = true

  };

  return await Task.FromResult(response);

  }

  }


  配置Grpc服务

  public void ConfigureServices(IServiceCollection services)

  {

  services.AddGrpc();

  }

  public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

  {

  app.UseEndpoints(endpoints =>

  {

  endpoints.MapGrpcService();//注入服务的实现。

  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");

  });

  });

  }


  项目结构截图: 郑州看男科医院哪里好http://www.ytsgnk.com/

  郑州看男科医院哪里好http://www.zztjnk.com/

  2.3 客户端调用Grpc

  1、添加引用Google.Protobuf、Grpc.Core、Grpc.Net.Client 还有刚才生成的Nuget包 ShenDa.SSM.Grpc

  2、调用


  class Program

  {

  static async Task Main(string[] args)

  {

  var channel = GrpcChannel.ForAddress("https://localhost:5001");

  var client = new SsmServiceClient(channel);

  await HealthCheck(client);

  }

  public static async Task HealthCheck(SsmServiceClient client)

  {

  var response = await client.HealthAsync(new EmptyRequest());

  System.Console.WriteLine(response.Success ? "健康" : "连接失败");

  }

  }


感谢各位的阅读,以上就是".Net Core中使用Grpc的方法"的内容了,经过本文的学习后,相信大家对.Net Core中使用Grpc的方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

服务 文件 客户 客户端 生成 消息 方法 数据 数据流 项目 C# 两个 单项 参数 双向 学习 健康 内容 医院 名称 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手机网络安全警示片长视频 网络安全培训心得简短 空间数据库的组织 青浦区信息软件开发品质保障 数据库有几个表就有几个实体吗 假期职场网络安全注意事项 hbuilder云数据库登陆 软件开发设计维修学校 集团网络安全宣传周 网络安全试题 数据库登录显示连接超时 网络安全宣传片拍摄 企业级应用软件开发案例 深圳市文明城市网络安全 网络安全的卡通画 上海品质软件开发服务电话 网络技术的现代化 移动的服务器地址填什么 浙江嵌入式软件开发服务 阿里云清理服务器内缓存 虹口区品质软件开发服务不二之选 网络安全公司的财务管理 nas网络服务器硬盘 高新区九悦软件开发工作室 装备网络安全试验与评价 与惠普合作培养软件开发 徐汇区市场软件开发协议 达梦数据库迁移工具报错内存溢出 宁波中老年群体网络技术 公安意识形态和网络安全工作
0