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

mac2025-08-23  1

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

先补充一下,上一篇中,通过代码指定地址 相关配置值在appsettings.json文件中 也可以通过配置文件进行指定:

"Kestrel": { //"EndpointDefaults": { // "Protocols": "Http2" //}, "Endpoints": { "HttpsInlineCertFile": { "Url": "http://localhost:50001", "Protocols": "Http2" //, //"Certificate": {//证书,使用TLS时指定路径及密码 // "Path": "<path to .pfx file>", // "Password": "<certificate password>" //} } } }

说明: 指定服务名称,以及调用方法 指定消息类型,里面有哪些成员名称以及位置 (支持string,Int32,double,int64等多种类型)

1.自定义服务:

1.创建proto文件 在项目文件中添加对此文件的引用 在proto文件中声明方法,消息类型

2.创建服务 代码如上图 实现proto文件中指定的方法 (注意服务类继承的父类要和proto文件中指定service名称一致) 格式是: xxx.xxxBase

客户端配置:基本同上篇 最终效果: 服务端: 客户端:

2.gRPC方法类型

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

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

1.一元调用

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

*Proto文件中的每个一元服务方法将导致用于调用方法的具体 gRPC 客户端类型上有两个 .net 方法:一个异步方法和一个阻止方法。 例如, GreeterClient可以通过两种方法调用SayHello GreeterClient.SayHelloAsync-以Greeter.SayHello异步方式调用服务。 可以等待。 GreeterClient.SayHello-调用Greeter.SayHello服务和阻止到完成。 不要在异步代码中使用。

2.服务端流式处理调用

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

proto格式:

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

重写方法: 在LocateService中 键入override 修改proto文件保存后直接通过这种方式重写即可 或者另一种方法: 点击LocaterBase,然后按F12,可查看相关函数的定义,将其复制出来然后简写即可 上图重写中,给输出流写入了5个LocateReply

客户端: 添加方法的声明,具体同上 调用方式: 最终效果截图: 服务端: 客户端:

3.客户端流式处理调用

方法定义同上,只是stream的位置不在返回了,而是在输入 服务端方法重写: 客户端配置:略,同上 客户端调用:

调用方法会返回一个AsyncClientStreamingCall类型

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

最终结果: 服务端:懒得贴图了 客户端: 最后一行是客户端流式调用的结果

4.双向流

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

调用:

服务端: 客户端:

最新回复(0)