gRPC入门学习之旅(一)

  • 实现定义的服务

9.在“解决方案资源管理器”中,使用鼠标左键选中“Services”文件夹,然后在菜单栏上,依次选择“添加-->新建项”。

10.在“添加新项”对话框中,选择“ASP.NET Core-->代码”节点,然后选择“类”项。

11.在“名称”文本框中,输入 UserService.cs,然后选择“添加”按钮。如下图。

12.在文本编辑器打开的UserService.cs类文件,编写如下代码:

using Demo.GrpcService.Protos;
using Grpc.Core; namespace Demo.GrpcService.Services
{
public class UserInfoService : UserInfo.UserInfoBase { private readonly ILogger<GreeterService> _logger;
public UserInfoService(ILogger<GreeterService> logger)
{ _logger = logger; }
/// <summary>
/// 实现了userinfo.proto协议文件中定义的GetUserInfo方法
/// </summary>
/// <param name="request"></param>
/// <param name="context"></param> /// <returns></returns>
public override Task<UserInfoResult> GetUserInfo(UserInfoRequest request, ServerCallContext context)
{ //return base.GetUserInfo(request, context);
//返回了user.proto协议文件中GetUserInfo方法定义的响应对象:UserInfoResult return Task.FromResult(new UserInfoResult
{ UserName = request.UserName, Password = request.Password, Name = $"姓名:张三", Tel="18800022269", Sex=1, IsLogin=false,
Age = 10,
City = "成都" });
}
/// <summary>
/// 实现了userinfo.proto协议文件中定义的Login方法
/// </summary>
/// <param name="request"></param>
/// <param name="context"></param>
/// <returns></returns> public override Task<UserInfoResult> Login(UserInfoRequest request, ServerCallContext context)
{
//return base.Login(request, context); if (request.UserName=="Admin" && request.Password=="111111")
{
//返回了user.proto协议文件定义的响应对象:UserInfoResult
return Task.FromResult(new UserInfoResult
{
UserName = request.UserName, Name = $"姓名:张三", Tel = "18800022269", Sex = 1,
IsLogin = true,
Age = 10,
City = "成都"
});
}
return Task.FromResult(new UserInfoResult
{ IsLogin = false });
} /// <summary>
/// 实现了userinfo.proto协议文件中定义的Save方法
/// </summary>
/// <param name="request"></param>
/// <param name="context"></param>
/// <returns></returns> public override Task<UserInfoResult> Save(UserInfoModifyRequest request, ServerCallContext context)
{ //return base.Save(request,context);
//返回了user.proto协议文件定义的响应对象:UserInfoResult return Task.FromResult(new UserInfoResult
{ UserName = request.UserName,
Name = request.Name,
Password = request.Password,
Sex =(int)request.Sex,
Age =(int)request.Age,
City=request.City,
Tel=request.Tel, });
}
} }

继承的UserInfo.UserInfoBase是UserInfo.proto协议文件生成的类文件中的。

  • 注册UserInfoService服务

13.在Visual Studio 2022中进行重新生成,编译成功之后。我们需要将新建的UserInfoService服务在启动文件中进行注册。 在“解决方案资源管理器”中,找到Program.cs文件,使用鼠标双击打开Program.cs文件,在文本编辑器中,添加一行代码。将业务服务进行注册。如下面代码中斜体的一行代码,

using Demo.GrpcService.Services;

 var builder = WebApplication.CreateBuilder(args);

// Additional configuration is required to successfully run gRPC on macOS.
// For instructions on how to configure Kestrel and gRPC clients on macOS, visit https://go.microsoft.com/fwlink/?linkid=2099682 // Add services to the container.
builder.Services.AddGrpc(); var app = builder.Build(); // Configure the HTTP request pipeline. app.MapGrpcService<GreeterService>(); app.MapGrpcService<UserInfoService>(); app.MapGet("/", () => "Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909"); app.Run();

启动服务

到此,gRPC服务端就新建配置完成了,此时我们就可以启动该项目让其运行起来。

13.在Visual Studio 2022的菜单栏上,依次选择“调试”、“开始执行(不调试)”以运行服务。 Visual Studio 会弹出一个“信任Asp.Net Core SSL证书”的提示信息。如下图。

14.此处建议是点击“是”。然后会打开一个控制台窗口,并显示该服务的监听端口。如下图。

15.在上图中我们发现有2个地址http://localhost:5209https://localhost:7149,如图中的两处框。这2个地址是我们在创建项目的时候,Visual Studio 2022在launchSettings.json配置文件中自动给我们配置的。gRPC客户端会使用到这2个地址,目的是给客户端请求请求地址,服务端将监听这两个端口。

gRPC入门学习之旅(四)的更多相关文章

  1. Java超简明入门学习笔记(四)

    Java编程思想第4版学习笔记(四) 第六章 访问权限控制         访问权限控制是面向对象编程中的重要概念,它划分了类设计者和类使用者的界限.通过设置权限,它一方面告诉类设计者,哪个部分的修改 ...

  2. Ext入门学习系列(四)面板控件

    第四章 使用面板 上节学习了Ext复杂对话框,更进一步了解了Ext的运行机制.本章重点来了解Ext所有控件的基础——面板控件. 一.Ext的面板是什么? 同样先来看看几个效果: 基本面板,点击右上角小 ...

  3. Egret入门学习日记 --- 第四篇

    第四篇(学习篇) 好了,今天继续把昨天的问题解决了. 今天见鬼了. 现在界面又出来了.唯一我动过的地方,应该就是这里: 是的,我点了一下刷新.之后,不管我怎么创建新的EXML文件,放在src目录,还是 ...

  4. PyQt4入门学习笔记(四)

    在PyQt4中的事件和信号 事件 所有的GUI应用都是事件驱动的.事件主要是来自于应用的使用者,但是像互联网连接,窗口管理器或者计时器也可以产生事件.当我们调用应用的exec_()方法时,应用就进入了 ...

  5. salesforce 零基础开发入门学习(十四)salesforce中工厂模式的运用

    提到工厂模式,想必大家都很熟悉,工厂模式作为一种设计模式,同样在salesforce中适用. 举一个例子,笔作为基类,可以有钢笔,铅笔,圆珠笔等等.有一个笔的工厂,当你向它要钢笔,它就会生产一支钢笔; ...

  6. [原创] zabbix学习之旅四:mail客户端安装

    相信大家使用zabbix的最主要目的就是当被监控机器发生故障时,能通过zabbix获得第一时间的报警提醒.zabbix常用的报警媒介有email,短信,jabber和脚本,这其中脚本类型最为灵活,尤其 ...

  7. java入门学习(十四)运算语句for

    循环可用来重复执行一条语句或者含有多条语句的语句块.在大多数程序中都会需要重复执行一块语句. for 循环的基本语法是: for (表达式1:表达式2:表达式3) { 若干语句 } for语句由关键字 ...

  8. Spring学习之旅(四)--高级装配Bean

    条件化 bean 有时候我们要满足某种情况才将bean 初始化放入容器中. 基于环境初始化不同的 bean 1.申明接口并创建两个实现类 public interface Teacher { void ...

  9. SCARA——OpenGL入门学习四(颜色)

    OpenGL入门学习[四] 本次学习的是颜色的选择.终于要走出黑白的世界了~~ OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. 无论哪种颜色模式,计算机都必须为每一个像素保存一些数 ...

  10. Python学习系列(四)Python 入门语法规则2

    Python学习系列(四)Python 入门语法规则2 2017-4-3 09:18:04 编码和解码 Unicode.gbk,utf8之间的关系 2.对于py2.7, 如果utf8>gbk, ...

随机推荐

  1. Java集合框架学习(五) ArrayList详解

    Arraylist介绍 Arraylist类实现了List接口. public class ArrayList<E> extends AbstractList<E> imple ...

  2. Java I/O 教程(三) FileOutputStream类

    Java FileOutputStream 用于将字节数据写入文件. 如果你需要将原始数据写入文件,就使用FileOutputStream类. Java.io.FileOutputStream cla ...

  3. 2020-11-18 原生js实现自动打字效果

    原理 使用定时器,对要输出的文字进行遍历,每遍历一次,都增加一个字以及在段尾加上"|"暗示别人正在打字. js代码 const fangWrite = (theString, qu ...

  4. 【LeetCode栈与队列#06】前K个高频元素(TopK问题),以及pair、priority_queue的使用

    前 K 个高频元素 力扣题目链接(opens new window) 给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = ...

  5. 在Ubuntu搭建DHCP服务器

    一.提供DHCP的服务器,自己必须有固定的IP地址 不然局域网就乱了,服务器自身启动(比如搭建完DHCP服务后,重新启动了服务器)的时候,DHCP服务器没有IP地址,无法和自己的DHCP服务通信. 在 ...

  6. 【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误

    问题描述 PHP应用突然遇见了500 The page cannot be displayed because an internal server error has occurred.错误,但是如 ...

  7. 【Azure 应用服务】Azure Function Timer触发函数加上Singleton后的问题

    问题描述 在Azure Function Timer Trigger的函数中,添加了Singleton属性,当Function的实例变为3个后,发现Timer函数并没有在三个实例上同时运行,每次触发时 ...

  8. 使用OpenTelemetry进行监控

    工具介绍 注意:该部分介绍摘抄自:https://www.aiwanyun.cn/archives/174 Prometheus.Grafana.Node Exporter 和Alertmanager ...

  9. 如何扩展Spark Catalyst,抓取spark sql 语句,通过listenerBus发送sql event以及编写自定义的Spark SQL引擎

    1.Spark Catalyst扩展点 Spark catalyst的扩展点在SPARK-18127中被引入,Spark用户可以在SQL处理的各个阶段扩展自定义实现,非常强大高效,是SparkSQL的 ...

  10. 影刀rpa:第二个项目学习心得

    教程有说到元素的关联操作,教程说自上而下的html路径,一时之间没弄清楚,索性就去看了下网页的html源码,才弄清楚到底是咋回事: 我是先选中了列表子元素的价格字段,选择两次以后就能选择到所有列表子元 ...