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

C#中使用gRPC(二)

时间:2024-12-24 19:20:10浏览次数:4  
标签:string proto C# request HelloReply gRPC 使用 message HelloRequest

这一节,我们实际操作和体验一下再C#中使用gPrc

我用的开发环境是VS2022和.Net6的版本。


创建好项目以后,ASP.NET Core会自动帮我们创建一个greet.proto的文件和一个服务
调整一下greet.proto文件,假设我们的sayHello方法传入一个对象,有年龄,姓名,住址和电话这四个字段,其中电话是一个字符串数组。方法返回一个json的HelloRequestUser对象。

  1. 修改proto文件
syntax = "proto3";

option csharp_namespace = "GrpcService";

package greet;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply);
}

// The request message containing the user's name.
message HelloRequest {
  HelloRequestUser user = 1;
}

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

message HelloRequestUser{
     string name = 1;
     int32 age = 2;
     string address = 3;
     repeated string phones = 4;
}

2.修改Services/GreeterService.cs文件中的 SayHello方法。

public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
        {
            //return Task.FromResult(new HelloReply
            //{
            //    Message = "Hello " + request.Name
            //});
            return Task.FromResult(new HelloReply
            {
                Message = "Hello " + JsonSerializer.Serialize(request.User)
            }); 
        }

至此,服务端程序暂时告一段落

接下来我们看一下客户端程序

  1. 新建一个.NetCore控制台应用程序。
  2. 在项目中添加一个文件夹叫做Protos的文件夹。
  3. 将服务端中的Protos/greet.proto文件拷贝到客户端程序中
syntax = "proto3";

option csharp_namespace = "gRPCDemo.demo";// 这里修改成你自己的命名空间。例如我的应用程序叫gRPCDemo。给他的命名空间叫gRPCDemo.demo

import  "Protos/userPackage.proto";
package greet;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply);
}

// The request message containing the user's name.
message HelloRequest {
  requestUser.UserItem user = 1;
}
// The response message containing the greetings.
message HelloReply {
  string message = 1;
}

然后再Protos文件夹中新建一个userPackage.proto的文件 代码如下

syntax = "proto3";

option csharp_namespace = "gRPCDemo.demo";

package requestUser;

message UserItem{
    string name = 1;
    int32 age = 2;
    string address = 3;
    repeated string phones = 4 ;
  
}

项目结构如下:

接下来修改main方法

    internal class Program
    {
        async static Task Main(string[] args)
        {
            
            using var channel = GrpcChannel.ForAddress("http://localhost:5234"); // 这里你要查看你的grpc服务端的端口号。我这里是5234
            var client = new Greeter.GreeterClient(channel);
            var request = new HelloRequest
            {
                User = new  UserItem() { Age = 23, Address = "bj", Name = "jane", }
            };
            request.User.Phones.Add("138 6666 6666");
            request.User.Phones.Add("138 9999 9999");
            var reply = await client.SayHelloAsync(request);
            Console.WriteLine("服务器返回: " + reply.Message);
            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }

接下来就可以调试啦。先把你的服务端启动。我是通过 dotnet run 命令启动的。
然后再把客户端启动起来,如图

标签:string,proto,C#,request,HelloReply,gRPC,使用,message,HelloRequest
From: https://www.cnblogs.com/baiyunpiaopiao/p/18628560

相关文章

  • C#中使用gRPC(一)
    在使用gRpc之前,需要先了解一点基础知识。1.ProtocolBuffers具体参考https://protobuf.dev/:简答来说就是Google开发的一种数据描述的格式。和具体的开发语言无关,根据这个东西,你能定义你方法的参数,返回值类型。首先创建一个xxx.proto文件.例如sayHello.protosyntax=......
  • [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......