C# 中使用 gRPC 通讯

gRPC 是一种高性能、开源的远程过程调用(RPC)框架,支持多种编程语言。本文将介绍如何在 C# 中使用 gRPC 进行通讯,包括创建 gRPC 服务文件、封装服务端和客户端类库,以及进行简单的测试。

参考 : C#封装GRPC类库及调用简单实例 - wtc87 - 博客园 (cnblogs.com)

创建并生成 gRPC 服务文件

  1. 首先,创建一个新的控制台应用程序项目,命名为 MgRPC​。

  2. 在项目中安装以下 NuGet 包:

    • Google.Protobuf
    • Grpc.Core
    • Grpc.Tools

定义 Protocol Buffer 文件

在项目中添加一个新的类文件,命名为 Link.proto​,并清空其内容。然后添加以下代码:


syntax = "proto3";

// 指定了生成的 C# 代码的命名空间为 LinkService。当使用 protobuf 编译器 (protoc) 将这个 .proto 文件转换为 C# 代码时,生成的类将位于 LinkService 命名空间中
option csharp_namespace = "LinkService";

//定义了一个名为 Link 的 gRPC 服务。在 gRPC 中,服务是由一个或多个 RPC 方法组成的
service Link
{
   
	//定义了一个 RPC 方法。这个方法名为 GetMessage,它接受一个 Mes 类型的消息作为参数,
	//并返回一个 Mes 类型的消息。在 gRPC 中,客户端可以调用这个方法,并发送一个 Mes 消息给服务端,然后服务端会处理这个消息并返回一个 Mes 消息给客户端。
	rpc GetMessage(Mes) returns (Mes);
}

//定义了一个名为 Mes 的消息类型。在 protobuf 中,消息是由一系列字段组成的,每个字段都有一个名称、一个类型和一个标识符。
message Mes
{
   
    // 客户端发送
	// 定义了一个名为 StrRequest 的字段,类型为 string,标识符为 1。这个标识符在消息内部是唯一的,并且一旦分配就不能更改,因为它被用于序列化和反序列化过程中的字段识别。
	string StrRequest = 1;
	// 同样定义了一个名为 StrReply 的字段,类型为 string,标识符为 2。(服务端回复)
	string StrReply = 2;
}

设置 Link.proto 文件属性

右键点击 Link.proto​ 文件,选择属性,将“生成操作”设置为 Protobuf compiler​。

image

生成 C# 代码

生成解决方案后,会在项目目录下生成 Link.cs​ 和 LinkGrpc.cs​ 两个文件。

image

服务端和客户端类库的封装

  1. 创建一个新的类库项目,命名为 GrpcLink​。
  2. 项目添加现有项,将生成的 Link.cs​ 和 LinkGrpc.cs​ 文件添加到项目中,并安装 Grpc.Core​ 和 Google.Protobuf​ NuGet 包。
  3. 创建两个类:LinkFunc用于放此类库可用于外部引用调用的方法。LinkServerFunc基于Link.LinkBase,用于重写在proto文件中定义的方法。

对于不同的项目,在客户端请求时,服务端要根据自身情况回复想回的内容,因此可以提供一个委托供外部自行开发回复函数。

在LinkFunc类中定义如下:

public static Func<string, string> ReplyMes;

创建服务端和客户端类

在项目中创建两个类:LinkFunc​ 和 LinkServerFunc​。

LinkServerFunc 类
using Grpc.Core;
using LinkService;
using System.Threading.Tasks;
using static LinkService.Link;

namespace GrpcLink
{
   
    /// <summary>
    /// 重写在proto文件中定义的方法
    /// </summary>
    public class LinkServerFunc :
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值