- 实现定义的服务
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个地址,目的是给客户端请求请求地址,服务端将监听这两个端口。
发表评论