到目前為止,Orleans7的核心概念基本已經學完,我準備使用Orleans7做一個項目實戰,來總結自己的學習效果。 項目效果 通過Orleans7來完成一個貪吃蛇游戲,要求如下: 可以多人線上玩 貪吃蛇可以上/下/左/右改方向 貪吃蛇吃完食物,身體長度+1 項目暫定架構 初步設想,此游戲包括一個O ...
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:5209
和https://localhost:7149
,如圖中的兩處框。這2個地址是我們在創建項目的時候,Visual Studio 2022在launchSettings.json配置文件中自動給我們配置的。gRPC客戶端會使用到這2個地址,目的是給客戶端請求請求地址,服務端將監聽這兩個埠。