• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

如何在.NET Core中为gRPC服务设计消息文件(Proto)

c# 搞代码 4年前 (2022-01-09) 12次浏览 已收录 0个评论

如何在.NET Core中为gRPC服务设计消息

使用协议缓冲区规范定义gRPC服务非常容易,但从需求转换为.NET Core,然后管理服务的演变时,需要注意几件事。

创建gRPC服务的核心是.proto文件,该文件以与语言无关的格式描述了该服务。使用.proto文件,Visual Studio可以为您的服务生成基类(您只需编写特定于业务的代码),或者可以生成用于可靠访问服务的客户端类。

.proto文件必须符合Google的协议缓冲区规范(通常称为ProtoBuf)。原始文件的内容使您可以指定服务的接口。服务接口由两部分组成:

  • 您的gRPC服务提供的方法
  • 这些方法的参数和返回值的数据结构

您可以使用Protocol Buffers规范中[1]定义的标量类型来构建这些数据结构(在ProtoBuf中称为“消息”)。可用的类型包括布尔值,字符串,字节数组和各种数字类型(浮点型,整数型和长型)。没有日期或固定的十进制类型。在接下来的专栏中,我将向您展示如何添加时间戳类型。对于小数,您可以使用float …并伴随着float带来的精度损失。

如果您要开始一个新项目,则要使用自2016年以来的proto3语法。但是,您必须在.proto文件的第一行“非空”行上明确指定proto3标准。引用规范[2]),否则将使用proto2规范解析您的.proto文件。指定您的文件使用proto3看起来像这样:

syntax = "proto3";

消息和C#类

使用proto3规范,用于客户信息的消息格式可能如下所示:

message CustomerResponse {
  int32 custid = 1;
  string firstName = 2;
  string lastName = 3;
  int32 age = 4;
  fixed32 creditLimit = 5;
}

等号后的数字指定消息中字段的位置,从位置1开始(在我的示例中,firstName将是消息中的第二个字段)。这些数字在消息中必须是唯一的(即,您不能在同一位置使用两个字段)。您不必按数字顺序列出字段,但是如果您这样做的话,则可以更轻松地发现重复的字段编号(尽管Visual Studio将发现任何重复的编号,并在构建应用程序时将其报告在“错误列表”中)。如果需要,您也可以跳过职位。此定义仅使用奇数,例如:

message CustomerResponse {
  int32 custid = 1;
  string firstName = 3;
  string lastName = 5;
}

在.NET Core中,消息格式被转换为类,每个字段都成为与消息同名的类的属性。命名这些属性时,.NET Core还将字段名称的第一个字符转换为大写。因此,例如,我上一个示例中的custId字段将成为我代码中CustomerRe

本文来源gao!%daima.com搞$代*!码9网(

sponse类上的CustId属性。

在此过程中,还得删除字段名称中的所有下划线,并且将以下字母大写(即,Last_name字段名称变为LastName属性)。

该过程还涉及将.NET类型映射到ProtoBuf类型(例如,ProtoBuf int32变为.NET int,ProtoBuf的int64变为long,fixed32变为uint),这需要向.NET Core添加一些新类。例如,ProtoBuf支持字节数组,其类型为字节。名为ByteString的新.NET数据类型支持该字段类型。要加载ByteString,请使用ByteString类的静态CopyFrom方法,并传递一个字节数组,如下所示:

byte[] bytes = new byte[1000];
cr.Valid = ByteString.CopyFrom(bytes);

要从ByteString检索字节数组,请使用对象的CopyTo方法,并传递要将字节复制到的数组和起始位置:

cr.Valid.CopyTo(bytes,0);

数组和字典


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:如何在.NET Core中为gRPC服务设计消息文件(Proto)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址