gRPC入門學習之旅(四) gRPC入門學習之旅(三)

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個地址,目的是給客戶端請求請求地址,服務端將監聽這兩個端口。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章