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:5209
和https://localhost:7149
,如图中的两处框。这2个地址是我们在创建项目的时候,Visual Studio 2022在launchSettings.json配置文件中自动给我们配置的。gRPC客户端会使用到这2个地址,目的是给客户端请求请求地址,服务端将监听这两个端口。
gRPC入门学习之旅(四)的更多相关文章
- Java超简明入门学习笔记(四)
Java编程思想第4版学习笔记(四) 第六章 访问权限控制 访问权限控制是面向对象编程中的重要概念,它划分了类设计者和类使用者的界限.通过设置权限,它一方面告诉类设计者,哪个部分的修改 ...
- Ext入门学习系列(四)面板控件
第四章 使用面板 上节学习了Ext复杂对话框,更进一步了解了Ext的运行机制.本章重点来了解Ext所有控件的基础——面板控件. 一.Ext的面板是什么? 同样先来看看几个效果: 基本面板,点击右上角小 ...
- Egret入门学习日记 --- 第四篇
第四篇(学习篇) 好了,今天继续把昨天的问题解决了. 今天见鬼了. 现在界面又出来了.唯一我动过的地方,应该就是这里: 是的,我点了一下刷新.之后,不管我怎么创建新的EXML文件,放在src目录,还是 ...
- PyQt4入门学习笔记(四)
在PyQt4中的事件和信号 事件 所有的GUI应用都是事件驱动的.事件主要是来自于应用的使用者,但是像互联网连接,窗口管理器或者计时器也可以产生事件.当我们调用应用的exec_()方法时,应用就进入了 ...
- salesforce 零基础开发入门学习(十四)salesforce中工厂模式的运用
提到工厂模式,想必大家都很熟悉,工厂模式作为一种设计模式,同样在salesforce中适用. 举一个例子,笔作为基类,可以有钢笔,铅笔,圆珠笔等等.有一个笔的工厂,当你向它要钢笔,它就会生产一支钢笔; ...
- [原创] zabbix学习之旅四:mail客户端安装
相信大家使用zabbix的最主要目的就是当被监控机器发生故障时,能通过zabbix获得第一时间的报警提醒.zabbix常用的报警媒介有email,短信,jabber和脚本,这其中脚本类型最为灵活,尤其 ...
- java入门学习(十四)运算语句for
循环可用来重复执行一条语句或者含有多条语句的语句块.在大多数程序中都会需要重复执行一块语句. for 循环的基本语法是: for (表达式1:表达式2:表达式3) { 若干语句 } for语句由关键字 ...
- Spring学习之旅(四)--高级装配Bean
条件化 bean 有时候我们要满足某种情况才将bean 初始化放入容器中. 基于环境初始化不同的 bean 1.申明接口并创建两个实现类 public interface Teacher { void ...
- SCARA——OpenGL入门学习四(颜色)
OpenGL入门学习[四] 本次学习的是颜色的选择.终于要走出黑白的世界了~~ OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. 无论哪种颜色模式,计算机都必须为每一个像素保存一些数 ...
- Python学习系列(四)Python 入门语法规则2
Python学习系列(四)Python 入门语法规则2 2017-4-3 09:18:04 编码和解码 Unicode.gbk,utf8之间的关系 2.对于py2.7, 如果utf8>gbk, ...
随机推荐
- Java集合框架学习(五) ArrayList详解
Arraylist介绍 Arraylist类实现了List接口. public class ArrayList<E> extends AbstractList<E> imple ...
- Java I/O 教程(三) FileOutputStream类
Java FileOutputStream 用于将字节数据写入文件. 如果你需要将原始数据写入文件,就使用FileOutputStream类. Java.io.FileOutputStream cla ...
- 2020-11-18 原生js实现自动打字效果
原理 使用定时器,对要输出的文字进行遍历,每遍历一次,都增加一个字以及在段尾加上"|"暗示别人正在打字. js代码 const fangWrite = (theString, qu ...
- 【LeetCode栈与队列#06】前K个高频元素(TopK问题),以及pair、priority_queue的使用
前 K 个高频元素 力扣题目链接(opens new window) 给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = ...
- 在Ubuntu搭建DHCP服务器
一.提供DHCP的服务器,自己必须有固定的IP地址 不然局域网就乱了,服务器自身启动(比如搭建完DHCP服务后,重新启动了服务器)的时候,DHCP服务器没有IP地址,无法和自己的DHCP服务通信. 在 ...
- 【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.错误,但是如 ...
- 【Azure 应用服务】Azure Function Timer触发函数加上Singleton后的问题
问题描述 在Azure Function Timer Trigger的函数中,添加了Singleton属性,当Function的实例变为3个后,发现Timer函数并没有在三个实例上同时运行,每次触发时 ...
- 使用OpenTelemetry进行监控
工具介绍 注意:该部分介绍摘抄自:https://www.aiwanyun.cn/archives/174 Prometheus.Grafana.Node Exporter 和Alertmanager ...
- 如何扩展Spark Catalyst,抓取spark sql 语句,通过listenerBus发送sql event以及编写自定义的Spark SQL引擎
1.Spark Catalyst扩展点 Spark catalyst的扩展点在SPARK-18127中被引入,Spark用户可以在SQL处理的各个阶段扩展自定义实现,非常强大高效,是SparkSQL的 ...
- 影刀rpa:第二个项目学习心得
教程有说到元素的关联操作,教程说自上而下的html路径,一时之间没弄清楚,索性就去看了下网页的html源码,才弄清楚到底是咋回事: 我是先选中了列表子元素的价格字段,选择两次以后就能选择到所有列表子元 ...