gRPC - Create C# gRPC client

要建立 gRPC 的 Client,須先將 GRPC.Tools、GRPC.Core、Google.Protobuf 這三個 NuGet 套件加入參考。

1
2
3
4
5
6
7
...
<ItemGroup>
<PackageReference Include="Google.Protobuf" Version="3.7.0" />
<PackageReference Include="Grpc.Core" Version="1.20.0" />
<PackageReference Include="Grpc.Tools" Version="1.20.0" />
</ItemGroup>
...


然後設定從 Proto 檔產生需要的程式部分。

1
2
3
4
<ItemGroup>
<Protobuf Include="../../proto/*.proto" GrpcServices="Client" />
<Content Include="@(Protobuf)" LinkBase="" />
</ItemGroup>


編譯後可在 obj 下看到產出的檔案。


接著開始實作 Client。


然後帶入 Server 位置建立 Channel 物件。

1
2
3
...
var channel = new Channel($"{host}:{port}", ChannelCredentials.Insecure);
...


接著帶入 Channel 建立 Service 的 Client 物件。

1
2
3
...
var client = new HelloService.HelloServiceClient(channel);
...


透過 Service 的 Client 物件調用對應的方法。

1
2
3
4
5
6
...
Console.WriteLine(client.SayHello(new HelloRequest()
{
...
}));
...


最後在不使用時將 Channel 關閉即可。

1
2
3
...
channel.ShutdownAsync();
...


程式寫起來會像下面這樣:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using Grpc.Core;
using GRPC.Message;

namespace GRPC.Client
{
class Program
{
static void Main(string[] args)
{
var channel = new Channel("127.0.0.1:8888", ChannelCredentials.Insecure);
var client = new HelloService.HelloServiceClient(channel);

Console.WriteLine(client.SayHello(new HelloRequest()
{
Name = "Larry"
}));

channel.ShutdownAsync().Wait();
}
}
}


運行起來 Client 就會透過 rpc 去跟 Server 調用,並將訊息回傳。