翼度科技»论坛 编程开发 .net 查看内容

gRPC入门学习之旅(四)

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
gRPC入门学习之旅(一)
gRPC入门学习之旅(二)gRPC入门学习之旅(三)

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

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

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

 

 
12.在文本编辑器打开的UserService.cs类文件,编写如下代码:
  1. using Demo.GrpcService.Protos;
  2. using Grpc.Core;
  3. namespace Demo.GrpcService.Services
  4. {
  5.         public class UserInfoService : UserInfo.UserInfoBase
  6.         {
  7.             private readonly ILogger<GreeterService> _logger;
  8.             public UserInfoService(ILogger<GreeterService> logger)
  9.             {
  10.                 _logger = logger;
  11.             }
  12.             /// <summary>
  13.             /// 实现了userinfo.proto协议文件中定义的GetUserInfo方法
  14.             /// </summary>
  15.             /// <param name="request"></param>
  16.             /// <param name="context"></param>
  17.             /// <returns></returns>
  18.             public override Task<UserInfoResult> GetUserInfo(UserInfoRequest request, ServerCallContext context)
  19.             {
  20.                 //return base.GetUserInfo(request, context);
  21.                 //返回了user.proto协议文件中GetUserInfo方法定义的响应对象:UserInfoResult
  22.                 return Task.FromResult(new UserInfoResult
  23.                 {
  24.                     UserName = request.UserName,
  25.                     Password = request.Password,
  26.                     Name = $"姓名:张三",
  27.                     Tel="18800022269",
  28.                     Sex=1,
  29.                     IsLogin=false,
  30.                     Age =  10,
  31.                     City = "成都"
  32.                 });
  33.             }
  34.         /// <summary>
  35.         /// 实现了userinfo.proto协议文件中定义的Login方法
  36.         /// </summary>
  37.         /// <param name="request"></param>
  38.         /// <param name="context"></param>
  39.         /// <returns></returns>
  40.         public override Task<UserInfoResult> Login(UserInfoRequest request, ServerCallContext context)
  41.         {
  42.             //return base.Login(request, context);
  43.             if (request.UserName=="Admin" && request.Password=="111111")
  44.             {
  45.                 //返回了user.proto协议文件定义的响应对象:UserInfoResult
  46.                 return Task.FromResult(new UserInfoResult
  47.                 {
  48.                     UserName = request.UserName,
  49.                     Name = $"姓名:张三",
  50.                     Tel = "18800022269",
  51.                     Sex = 1,
  52.                     IsLogin = true,
  53.                     Age = 10,
  54.                     City = "成都"
  55.                 });
  56.             }
  57.             return Task.FromResult(new UserInfoResult
  58.             {
  59.                           
  60.                 IsLogin = false
  61.             
  62.             });
  63.         }
  64.         /// <summary>
  65.         /// 实现了userinfo.proto协议文件中定义的Save方法
  66.         /// </summary>
  67.         /// <param name="request"></param>
  68.         /// <param name="context"></param>
  69.         /// <returns></returns>
  70.         public override Task<UserInfoResult> Save(UserInfoModifyRequest request, ServerCallContext context)
  71.         {
  72.             //return base.Save(request,context);
  73.             //返回了user.proto协议文件定义的响应对象:UserInfoResult
  74.             return Task.FromResult(new UserInfoResult
  75.             {
  76.                 UserName = request.UserName,
  77.                 Name = request.Name,
  78.                 Password = request.Password,
  79.                 Sex =(int)request.Sex,
  80.                 Age =(int)request.Age,
  81.                 City=request.City,
  82.                 Tel=request.Tel,
  83.             });
  84.         }
  85.     }
  86.     }
复制代码
继承的UserInfo.UserInfoBase是UserInfo.proto协议文件生成的类文件中的。

  • 注册UserInfoService服务
13.在Visual Studio 2022中进行重新生成,编译成功之后。我们需要将新建的UserInfoService服务在启动文件中进行注册。 在“解决方案资源管理器”中,找到Program.cs文件,使用鼠标双击打开Program.cs文件,在文本编辑器中,添加一行代码。将业务服务进行注册。如下面代码中斜体的一行代码,
  1. using Demo.GrpcService.Services;
  2. var builder = WebApplication.CreateBuilder(args);
  3. // Additional configuration is required to successfully run gRPC on macOS.
  4. // For instructions on how to configure Kestrel and gRPC clients on macOS, visit https://go.microsoft.com/fwlink/?linkid=2099682
  5. // Add services to the container.
  6. builder.Services.AddGrpc();
  7. var app = builder.Build();
  8. // Configure the HTTP request pipeline.
  9. app.MapGrpcService<GreeterService>();
  10. app.MapGrpcService<UserInfoService>();
  11. 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");
  12. 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个地址,目的是给客户端请求请求地址,服务端将监听这两个端口。
 

 

来源:https://www.cnblogs.com/chillsrc/p/18105263
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具