加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

.Net Core中行使Grpc的要领

发布时间:2020-10-26 12:45:43 所属栏目:移动互联 来源:网络整理
导读:这篇文章首要先容了.Net Core中行使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文件。

<ItemGroup>
  <Protobuf Include="ProtosUser.proto" />
  <Protobuf Include="ProtosHealth.proto" />
  <Protobuf Include="ProtosCommon.proto" />
  <Protobuf Include="ProtosSsmService.proto" />
 </ItemGroup>

天生项目,就会在 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<HealthResponse> 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<SsmServiceImpl>();//注入处事的实现。
    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 ");
    });
   });
  }

项目布局截图:

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内容请搜刮剧本之家早年的文章或继承赏识下面的相干文章但愿各人往后多多支持剧本之家!

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读