1. 總覽
gRPC 是由 Google 開發的遠端程序呼叫 (RPC) 架構和工具集,支援各種語言、平台中立的遠端程序呼叫,可讓您使用通訊協定緩衝區 (通訊協定緩衝區) 定義服務。通訊協定緩衝區是特別強大的二進位序列化工具集和語言。然後,您就可以透過各種語言的服務定義,產生慣用的用戶端和伺服器虛設常式。
在本程式碼研究室中,您將瞭解如何建構使用 gRPC 架構公開 API 的 C# 服務。您會透過以 C# 編寫的主控台用戶端與這項服務互動,且該用戶端與服務說明與服務相同。
課程內容
- 通訊協定緩衝區語言。
- 如何使用 C# 實作 gRPC 服務。
- 如何使用 C# 實作 gRPC 用戶端。
- 如何更新 gRPC 服務。
軟硬體需求
- 瀏覽器,例如 Chrome 或 Firefox。
- 已安裝 Visual Studio 2013 以上版本。
- 熟悉 .NET Framework 與 C# 語言。
您會如何使用這個教學課程?
您對 Google Cloud Platform 的使用感想為何?
2. 下載並建構 gRPC C# 範例
下載範例
下載 gRPC C# 範例存放區做為 ZIP 檔案,然後解壓縮。
或者,您也可以複製其 Git 存放區。
git clone https://github.com/meteatamel/grpc-samples-dotnet.git
無論採用哪種方式,您都應該擁有包含以下內容的 grpc-samples-dotnet
資料夾:
建構解決方案
範例應用程式資料夾包含 Visual Studio 解決方案 GrpcSamples.sln
。按兩下即可在 Visual Studio 中開啟解決方案。您應該會看到包含數個專案的解決方案。
我們會在下一節詳細說明專案,但先來建構專案。前往 Build > Build Solution
或 Ctrl + Shift + B
建構解決方案。這項操作會從 NuGet 下載所有依附元件,然後編譯應用程式。
最後,您應該會在 Visual Studio 主控台輸出內容中看到 Build succeeded
訊息。
3. 探索希臘式範例
Greeter 是一個簡單的 gRPC 範例,其中用戶端會傳送具有名稱的要求,而伺服器會回應,後面附上名稱的訊息。有一個 Greeter 專案,其中包含用戶端和伺服器的基礎服務定義 (proto 檔案)。
Greeter 專案
這是用戶端與伺服器共用的通用專案。其 greeter.proto
是用戶端和伺服器使用的 gRPC 服務定義。服務定義定義了名為 GreetingService
的 gRPC 服務,且採用 greeting
方法,以 HelloRequest
做為輸入內容及 HelloResponse
輸出。
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
}
此為一元 (即不使用串流) 方法,可讓用戶端傳送單一要求,並從伺服器取得一項回應。您可以探索 greeter.proto.
的其他內容。這項專案也提供名為 generate_protos.bat
的指令碼,可用於從 proto 檔案產生用戶端和伺服器虛設常式。專案已包含產生的用戶端和伺服器虛設常式,因此您不必自行產生。不過,如果您對服務定義檔案進行變更,就必須執行這段指令碼才能重新產生虛設常式。
希臘伺服器
這是 gRPC 伺服器的專案。Program.cs
是設定通訊埠和伺服器實作項目的主要進入點。重要的類別是 GreeterServiceImpl.cs
。這種 greeting
方法會實作實際功能。
public override Task<HelloResponse> greeting(HelloRequest request,
ServerCallContext context)
{
return Task.FromResult(new HelloResponse {
Greeting = "Hello " + request.Name });
}
希臘用戶端
這是 gRPC 服務的用戶端。而且還有 Program.cs
做為進入點。它會建立一個頻道來與伺服器通訊,然後依據產生的虛設常式建立頻道的用戶端。然後建立一個要求,並使用用戶端虛設常式傳送至伺服器。
4. 執行 Greeter 範例
首先,請啟動 Greeter Server。開啟命令提示字元視窗,然後前往 Greeter 伺服器的 bin > Debug
資料夾,執行執行檔。您應該會看到伺服器正在監聽。
> C:\grpc-samples-dotnet\GreeterServer\bin\Debug>GreeterServer.exe
GreeterServer listening on port 50051
Press any key to stop the server...
接下來,執行 Greeter Client。在另外的命令提示字元中,前往 Greeter 的 bin > Debug
資料夾,然後執行執行檔。您應該會看到傳送要求的用戶端,並接收來自伺服器的回應。
> C:\grpc-samples-dotnet\GreeterClient\bin\Debug>GreeterClient.exe
GreeterClient sending request
GreeterClient received response: Hello Mete - on C#
Press any key to exit...
5. 更新 Greeter 範例
讓我們來瞭解一下服務更新過程。將新方法新增至 gRPC 服務,稱為「再見」。這個方法會傳回「再見了」,而不會傳回用戶端的 Hello。
首先請更新服務定義檔案 greeter.proto.
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
rpc goodbye(HelloRequest) returns (HelloResponse);
}
接下來,您需要重新產生用戶端與伺服器虛設常式。在命令提示字元中執行 generate_protos.bat
。產生虛設常式後,您可能需要重新整理 Visual Studio 專案,才能取得更新後的程式碼。
最後,更新用戶端和伺服器程式碼,以便利用新的方法。在服務中更新 GreeterServiceImpl.cs
,並新增 goodbye
方法。
public override Task<HelloResponse> goodbye(HelloRequest request,
ServerCallContext context)
{
return Task.FromResult(new HelloResponse {
Greeting = "Goodbye " + request.Name });
}
在用戶端中,呼叫 Program.cs.
中的 goodbye
方法
response = client.goodbye(request);
Console.WriteLine("GreeterClient received response: "
+ response.Greeting);
請重新建構專案,然後再次執行伺服器和用戶端。您應該會看到客戶收到告別訊息。
> C:\grpc-samples-dotnet\GreeterClient\bin\Debug>GreeterClient.exe
GreeterClient sending request
GreeterClient received response: Hello Mete - on C#
GreeterClient received response: Goodbye Mete - on C#
Press any key to exit...
6. 探索 Chat 範例
解決方案中還有 ChatServer
和 ChatWindowsClient
專案。顧名思義,這是適用於簡易即時通訊應用程式的用戶端與伺服器配對。「Chat
」專案含有名為「chat.proto
」的服務定義檔案。這會使用 chat
方法定義 ChatService
。
service ChatService {
rpc chat(stream ChatMessage) returns (stream ChatMessageFromServer);
}
重要的是,傳入和傳出的即時通訊訊息都會加上 stream
關鍵字標記。這麼做基本上會將連線轉換為雙向資料流,用戶端和伺服器可隨時互相傳送訊息;最適合即時通訊應用程式的解決方案
您可以進一步探索範例、建構並執行該範例,瞭解它在運動中的表現。
7. 恭喜!
涵蓋內容
- 通訊協定緩衝區語言。
- 如何使用 C# 實作 gRPC 服務。
- 如何使用 C# 實作 gRPC 用戶端。
- 如何更新 gRPC 服務。
後續步驟
- 進一步瞭解 Google Cloud Platform 中的 Windows。
- 進一步瞭解 Google Cloud Platform 上的 .NET。
- 進一步瞭解 Cloud Tools for Visual Studio。