C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式

上一篇:C# netCore Grpc服务 (1)初步认知和HelloWorld

先补充一下,上一篇中,通过代码指定地址
C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第1张图片
相关配置值在appsettings.json文件中
也可以通过配置文件进行指定:

"Kestrel": {
    //"EndpointDefaults": {
    //  "Protocols": "Http2"
    //},
    "Endpoints": {
      "HttpsInlineCertFile": {
        "Url": "http://localhost:50001",
        "Protocols": "Http2" //,
        //"Certificate": {//证书,使用TLS时指定路径及密码
        //  "Path": "",
        //  "Password": ""
        //}
      }
    }
  }

C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第2张图片
说明:
指定服务名称,以及调用方法
指定消息类型,里面有哪些成员名称以及位置
(支持string,Int32,double,int64等多种类型)

1.自定义服务:

1.创建proto文件
在这里插入图片描述
在项目文件中添加对此文件的引用
在这里插入图片描述
在proto文件中声明方法,消息类型
C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第3张图片

2.创建服务
在这里插入图片描述C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第4张图片
代码如上图
实现proto文件中指定的方法
(注意服务类继承的父类要和proto文件中指定service名称一致)
格式是:
xxx.xxxBase

客户端配置:基本同上篇
最终效果:
服务端:
C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第5张图片
客户端:

在这里插入图片描述

2.gRPC方法类型

GRPC 调用通过在客户端上调用方法来启动。 GRPC 客户端将处理消息序列化,并将 gRPC 调用寻址到正确的服务。

gRPC 具有不同类型的方法。 使用客户端进行 gRPC 调用的方式取决于所调用的方法的类型。

1.一元调用

上面的case中的方法类型为一元调用
一元调用:从客户端发送请求消息开始。 服务完成后,将返回响应消息。

*Proto文件中的每个一元服务方法将导致用于调用方法的具体 gRPC 客户端类型上有两个 .net 方法:一个异步方法和一个阻止方法
例如, GreeterClient可以通过两种方法调用SayHello
C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第6张图片
GreeterClient.SayHelloAsync-以Greeter.SayHello异步方式调用服务。 可以等待。
GreeterClient.SayHello-调用Greeter.SayHello服务和阻止到完成。 不要在异步代码中使用。

2.服务端流式处理调用

上面的一元调用属于 客户端1个输入,服务端1个输出
服务端流式处理调用则属于 客户端1个输入,服务端多个输出(一个流)

proto格式:
C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第7张图片

注意GetLocateInfo3中的returns,和第一个方法相比其他都一样,仅在returns中多了一个stream

重写方法:
在LocateService中 键入override
C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第8张图片
修改proto文件保存后直接通过这种方式重写即可
或者另一种方法:
C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第9张图片
点击LocaterBase,然后按F12,可查看相关函数的定义,将其复制出来然后简写即可
C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第10张图片
上图重写中,给输出流写入了5个LocateReply

客户端:
添加方法的声明,具体同上
调用方式:
C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第11张图片
最终效果截图:
服务端:
C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第12张图片
客户端:
C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第13张图片

3.客户端流式处理调用

方法定义同上,只是stream的位置不在返回了,而是在输入
服务端方法重写:
C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第14张图片
C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第15张图片
客户端配置:略,同上
客户端调用:

C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第16张图片

调用方法会返回一个AsyncClientStreamingCall类型
C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第17张图片

再调用RequestStream.WriteAsync异步方法写入输入参数流
写入完成后
通知完成,调用CompleteAsync方法
再调用异步方法获取返回值

最终结果:
服务端:懒得贴图了
客户端:
C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第18张图片
最后一行是客户端流式调用的结果

4.双向流

其实这个也蛮简单,相当于上面2.3两个的结合

调用:
C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第19张图片

服务端:
C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第20张图片
客户端:

C# netCore Grpc服务 (2)配置 ,proto以及四种调用方式_第21张图片

你可能感兴趣的:(C#,Grpc)