gRPC入門學習之旅(四)

DotNet菜园發表於2024-03-30

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

相關文章