0%

[DotnetCore]gRPC101: Greeting專案:Client篇

前情提要

筆者於[DotnetCore]gRPC101: Gretting專案-Server篇中詳細交代產生該系列文之原因了,因篇幅太長,決定分為Server篇及Client篇,簡述一下Client端的作法,還記得Server篇中提到以及宣告好的proto檔案嗎,對於Client端來說,只要拿Server端產生的proto檔案拿來用即可,因為也是要產生編譯後的cs檔案,namespace要改成Client端專案名稱即可,一切就水到渠成了,接下來就拿proto檔中的方法呼叫下去就萬事ok了,跟著筆者看下去吧。

內容

筆者依照慣例,簡單講述一下其步驟:

  • 建立Console專案
  • 複製貼上proto專案及調整namespace
  • 編譯proto檔案
  • Program.cs中透過gRPC傳輸技術呼叫方法

Gretting專案:Client

建立Console專案

筆者就沿用上篇中實作的方案中

1
2
3
cd GRPC.Demo
dotnet new console -o GRPC.Demo.Client
cd GRPC.Demo.Client

安裝必要套件

Client端專案則需要以下套件

1
2
3
4
5
6
# 包含dotnet core Client端所需
dotnet add package Grpc.Net.Client
# 包含protobuf訊息API
dotnet add package Google.Protobuf
# 產生dotnet core編譯後cs檔案所需,上偏能夠編譯該套件所賜
dotnet add package Grpc.Tools

複製proto檔案並調整namespace

複製步驟就因人而異,筆者這邊透過指令來複製

1
2
3
cd GRPC.Demo.Client\
mkdir protos
cp ..\GRPC.Demo.Server\protos\greet.proto protos\greet.proto

透過vscode開啟專案,調整其namespace

1
option csharp_namespace = "GRPC.Demo.Client";

編譯proto檔案

筆者這邊就不贅述其dotnet-grpc tool了,就直接下指令吧

1
2
cd GRPC.Demo.Client\
dotnet-grpc add-file -p GRPC.Demo.Client.csproj -s Client protos\greet.proto

接著就下指令建置吧

1
dotnet build

你就會得到它了,會在obj>Debug>{Target Framework}>protos中,筆者就不另外截圖了

改造Program.cs

Client端呼叫相關的程式碼,以這個例子來說,有一個SayHello方法可以呼叫

1
2
3
4
5
6
7
8
9
10
11
using System.Threading.Tasks;
using Grpc.Net.Client;
using GRPC.Demo.Client;

using var channel = GrpcChannel.ForAddress("https://localhost:7222");// 讀者要換成Server端執行監聽的tcp port
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();

執行程式

  • Server端程式
1
2
3
cd GRPC.Demo.Server\
# 要特別注意一定要用https這個profile來跑
dotnet run --launch-profile https

怕讀者不知道https profile在哪,筆者這邊列出所在路徑: Properties>launchSettings.json,裡頭有

1
2
3
4
5
6
7
8
9
10
11
12
13
"profiles": {
// 以上省略
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7222;http://localhost:5044",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
// 以下省略
}
  • Client端程式
1
2
3
4
5
cd GRPC.Demo.Client\
dotnet run
# 執行結果如下
# Greeting: Hello GreeterClient
# Press any key to exit...

結論

到這邊大功告成了,完成了一個gRPC的完整招式,筆者這邊接下來依照工作所需,會繼續研讀https://learn.microsoft.com/en-us/aspnet/core/grpc/?view=aspnetcore-7.0中的Remote Procedure Call Apps相關章節,敬請期待。

參考