首页 > 编程语言 >C#中使用gRPC(一)

C#中使用gRPC(一)

时间:2024-12-24 19:19:13浏览次数:3  
标签:int32 string proto C# message gRPC 使用 CORPUS page

在使用gRpc之前,需要先了解一点基础知识。
1. Protocol Buffers 具体参考https://protobuf.dev/ :
简答来说就是Google开发的一种数据描述的格式。和具体的开发语言无关,根据这个东西,你能定义你方法的参数,返回值类型。
首先 创建一个 xxx.proto 文件 .例如 sayHello.proto

syntax = "proto3"; //必须是第一行 制定使用哪个版本的协议,可以选择 proto2/proto3
//定义一个 消息 ,相当于C#里面的一个类  至于这个类怎么用,一会说
message SearchRequest {
  string query = 1;
  int32 page_number = 2;
  int32 results_per_page = 3;
}

SearchRequest 相当于C#类名字。string ,int32 ,int32 是proto里面的数据类型。query ,page_number ,results_per_page 是类的属性名,后面又给了数字,这个是proto的语法要求。在给字段编号时遵循以下规则

  1. 你必须给你的字段一个1-536,870,911的编号
  2. 每个字段的编号必须唯一
  3. 19,000 to 19,999是 Protocol Buffers 预留的,你要是用了 编译器就报警。(最好别用免得有麻烦)
  4. 不能使用保留字段名字和保留字段编号

举例子:

message SearchRequest {
  reserved    15, 9 to 11;
  reserved "foo", "bar";
  string query = 1;
  int32 page_number = 2;
  int32 results_per_page = 3;
   string foo =4;
   string bar=10;
} 
//在这个消息里面 定义了2个保留字段 分别是 foo 和 bar 以及15 ,9,10,11这四个保留的编号,如果你在消息中用了6个中的一个,就会报错。

文档中有一段写了 字段可以是单数或者复数。

单数就用optional修饰和C#中普通的字段没区别 如: string query = 1和optional string query = 1

复数就用repeated修饰,C#对于repeated修饰的字段会生成一个RepeatedField的泛型字段,相当于是list集合 如: repeated string emails= 4; 他最后生成C#类,就简单看成list<string>

定义枚举

在.proto文件中是可以定义枚举的 ,如:
enum Corpus {
  CORPUS_UNSPECIFIED = 0;
  CORPUS_UNIVERSAL = 1;
  CORPUS_WEB = 2;
  CORPUS_IMAGES = 3;
  CORPUS_LOCAL = 4;
  CORPUS_NEWS = 5;
  CORPUS_PRODUCTS = 6;
  CORPUS_VIDEO = 7;
}

message SearchRequest {
  string query = 1;
  int32 page_number = 2;
  int32 results_per_page = 3;
  Corpus corpus = 4;
}
//与C#不同,在.proto(proto3)文件中定义枚举,第一个枚举值必须是0,而且名字是必须是 枚举类型 ENUM_TYPE_NAME_UNSPECIFIED 或者ENUM_TYPE_NAME_UNKNOWN 。(举例,你的枚举叫Colors 那么第一个值就是Colors_UNSPECIFIED=0 )
//这里我自己测试出来,如果NUM_TYPE_NAME_UNSPECIFIED 或者ENUM_TYPE_NAME_UNKNOWN不写,直接把 red=0 ,也不报错。但是如果你传值,那么默认值就是0 也就是red

package

syntax = "proto3";

option csharp_namespace = "gRPCDemo.demo";

package requestUser;//pacgage 名字

message UserItem{

    string name = 1;
    int32 age = 2;
    string address = 3;
    repeated string phones = 4 ;
  
}
//这个文件我保存在Protos/userPackage.proto。然后别的 地方可以引用他
syntax = "proto3";

option csharp_namespace = "gRPCDemo.demo";

import  "Protos/userPackage.proto"; //导入文件路径
package greet;


// 使用的是 requestUser这个包下面的 userItem. requestUser包对应的物理文件是Protos/userPackage.proto
message HelloRequest {
  requestUser.UserItem user = 1;
}

// The response message containing the greetings.
message HelloReply {
  string message = 1;
}

重点来了。定义服务Defining Services

如果你想让别人调用你的服务(就是别人调用你的方法),就要定义服务
service SearchService {
  rpc Search(SearchRequest) returns (SearchResponse);//这里就是我们对外暴露了一个叫做search的方法,这个方法参数是SearchRequest类型,返回值是SearchResponse类型
}

service Greeter {
 
  rpc SayHello (HelloRequest) returns (HelloReply);// 再比如我们定义一个sayhello的方法,参数是HelloRequest返回值是HelloReply
  //你要是调用无参的方法 参考这个文档:https://stackoverflow.com/questions/31768665/can-i-define-a-grpc-call-with-a-null-request-or-response/31772973
}

有这些基础后,我们下一节来测试一下。

https://www.cnblogs.com/baiyunpiaopiao/p/18628560

标签:int32,string,proto,C#,message,gRPC,使用,CORPUS,page
From: https://www.cnblogs.com/baiyunpiaopiao/p/18628502

相关文章

  • [C++] 小游戏 能量 1.1.1 版本 zty出品
    前言今天zty带来的是能量1.1.1版本,好久没出游戏啦,大家给个赞呗,zty还要上学,发作品会少一点                           先 赞 后 看  养  成 习 惯               ......
  • 适合中小数量用户使用,苹果手机免越狱投屏中控尽享高清、流畅的体验!
    在如今的生活中,投屏功能已经逐渐普及,无论是在会议中还是家庭聚会中,投屏都能为我们带来更便捷的展示和分享体验。而当我们想要将手机中的视频、照片等内容投屏到大屏幕时,是否又为繁琐的操作步骤而感到烦恼呢?今天,我将为大家介绍一款能够轻松实现苹果手机免越狱投屏中控的功能,让你......
  • 职工信息管理系统 C++课程设计
    课程设计课程名称:C++课程设计设计课题:职工信息管理系统指导教师:总评成绩:专业:软件工程班级:姓名:学号:二O二四年六月三十日目录第一章课设目标、内容及要求11.1课设目标11.2课程设计内容和要求11.2.1需求分析11.2.2系统功能11.2.3设计要......
  • 如何使用WGAN-GP生成一维滚动轴承振动数据样本。以西储大学(CWRU)数据集为例,提供一个基
    使用WGAN-GP生成一维滚动轴承振动数据样本。以西储大学(CWRU)数据集为例,提供一个基于训练好的权重参数文件进行测试的代码。WGAN-GP-1D轴承振动数据样本生成方法,西储大学数据集为例,可替换自己的数据。代码注释清楚,包含训练过程的代码train_gan和基于训练好的权重参数文件......
  • 如何使用 基于连续小波变换时频图的CNN轴承故障诊断模型 Python、jupyter notebook,实
    基于连续小波变换时频图的CNN轴承故障诊断模型Python、jupyternotebook使用基于连续小波变换(ContinuousWaveletTransform,CWT)生成的时频图来构建一个卷积神经网络(CNN)模型进行滚动轴承故障诊断。以下是详细的步骤和代码示例。步骤概述数据集准备特征提取(CWT时频图)......
  • TU2983: Advanced Databases
    TU2983:Advanced DatabasesIndividualAssignment2Data Entryand Data Manipulation Interfaces [UPDATED9/12/2024]IMPORTANT NOTE:Thisassignmentcontinuesfromtheworkyou havedone in “IndividualAssignment 1”.Youare requiredtore-uses......
  • 禅道安装与使用全解析:开启高效项目管理之旅
    禅道是一款国产的开源项目管理软件,它融合了项目管理、任务管理、缺陷管理、测试管理等多种功能,广泛应用于互联网软件研发等众多领域。一、功能特点项目管理禅道可以对项目进行全生命周期的管理。从项目的创建、规划,到执行、监控和收尾,每个阶段都有相应的功能支持。例如,在项目......
  • Bugzilla 安装及使用指南:助力软件缺陷精准管控
    Bugzilla是一个开源的缺陷跟踪系统,在软件开发和测试过程中被广泛使用。一、主要功能缺陷提交开发团队成员、测试人员或者用户可以通过Bugzilla提交软件中发现的问题。提交时需要详细描述缺陷的症状,比如软件在执行某个特定操作时出现的错误提示信息、软件崩溃的具体场景等。例......
  • Deep Learning Convolutional Neural Networks
    LapProject–DeepLearningObjectiveThisexperimentaimstohelpstudentsunderstandConvolutionalNeuralNetworks(CNNs)andtheirapplicationsindeeplearningbyimplementinganimagerecognitionmodel.StudentswillusetheCombinedCOCOdataset,do......
  • Jira 安装与使用全攻略:开启高效项目管理之旅
    一、基本介绍所属公司及背景:Jira是由澳大利亚的Atlassian公司开发的。Atlassian是一家知名的软件公司,专注于为团队提供协作和生产力工具。Jira最初是为软件开发团队设计的,用于管理软件项目中的问题(如缺陷、任务、新功能请求等),随着时间的推移,它的应用范围不断扩展,被许多不同行业......