gRPC入门学习之旅(一)

  • 实现定义的服务

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

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

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

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

usingDemo.GrpcService.Protos;usingGrpc.Core;namespaceDemo.GrpcService.Services
{
public classUserInfoService : 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(newUserInfoResult
{

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=="666666666666")
{
//返回了user.proto协议文件定义的响应对象:UserInfoResult
return Task.FromResult(newUserInfoResult
{
UserName
=request.UserName,

Name
= $"姓名:张三",

Tel
= "18800022269",

Sex
= 1,
IsLogin
= true,
Age
= 10,
City
= "成都"});
}
return Task.FromResult(newUserInfoResult
{

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(newUserInfoResult
{

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
文件,在文本编辑器中,添加一行代码。将
业务服务
进行注册。如下面代码中斜体的一行代码,

usingDemo.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, visithttps://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个地址,目的是给客户端请求请求地址,服务端将监听这两个端口。

标签: none

添加新评论