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:5209
和https://localhost:7149
,如圖中的兩處框。這2個地址是我們在建立專案的時候,Visual Studio 2022在launchSettings.json配置檔案中自動給我們配置的。gRPC客戶端會使用到這2個地址,目的是給客戶端請求請求地址,服務端將監聽這兩個埠。