隨著.Net Core 3.0及后續版本的出現,微軟似乎正在放棄極具Windows特征的WCF,作為WCF的替代者,VS Code 或VS2019已經有基于.Net Core 3.0平臺的“gPRC專案模板”,這個模板極大地簡化了gRPC的開發程序,
gRPC也可應用于.Net Framework,由于VS2019沒有提供基于.Net Framework平臺的“gPRC專案模板”,開發者需要用手工方式處理,本文采用VS2019,以.Net Framework 4.7.2為例,描述gPRC的實作步驟,
步驟一、 創建解決方案及專案

- Greeter,.Net Framework4.7.2類別庫專案,定義服務器與客戶端之間服務協議
- GreeterServer,.Net Framework4.7.2控制臺程式,gRPC服務端,提供gPRC服務
- GreeterClinet,.Net Framework4.7.2控制臺程式,gRPC客戶端,呼叫GreetServer提供的服務
步驟二、NuGet獲取程式包
1. 在“解決方案gRPCDemo”滑鼠右鍵,“管理解決方案的NuGet程式包”

2. 安裝“Google.ProtoBuf”


3. 安裝“Grpc.Core”


4.安裝“Grpc.Tools”


步驟三、撰寫服務協議并生成服務類(此步驟需手工處理)
1. 在類別庫專案“Greeter”中添加“helloworld.proto”檔案,輸入以下服務定義,
syntax = "proto3";
package Greeter;
service Greet {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
2. 生成服務類
在“解決方案”上點擊滑鼠右鍵,“在檔案資源管理器中打開檔案夾”


輸入以下命令,將“hello.proto”轉換為服務類
packages\Grpc.Tools.2.32.0\tools\windows_x86\protoc.exe -I Greeter --csharp_out Greeter Greeter\hello.proto --grpc_out Greeter --plugin=protoc-gen-grpc=packages\Grpc.Tools.2.32.0\tools\windows_x86\grpc_csharp_plugin.exe

3. 將生成的服務類Hello.cs和HelloGrpc.cs添加到“Greeter”專案中

4. 編譯類別庫“Greeter”
步驟四、撰寫服務端
1. 添加類別庫專案Greeter參考
2. 服務端代碼
using Greeter;
using Grpc.Core;
using System;
using System.Threading.Tasks;
namespace GreeterServer
{
class Program
{
static void Main(string[] args)
{
const int port = 5555;
Server server = new Server
{
Services = { Greet.BindService(new GreetImpl()) },
Ports = { new ServerPort("localhost", port, ServerCredentials.Insecure) }
};
server.Start();
Console.WriteLine($"Greeter Server Listening on port {port}");
Console.WriteLine("Press Enter to exit");
Console.ReadLine();
server.ShutdownAsync().Wait();
}
}
class GreetImpl: Greet.GreetBase
{
public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
{
return Task.FromResult(new HelloReply { Message = $"Hello {request.Name}" });
}
}
}
步驟五、撰寫客戶端代碼
1. 添加類別庫專案Greeter參考
2. 客戶端代碼
using Greeter;
using Grpc.Core;
using System;
namespace GreeterClient
{
class Program
{
static void Main(string[] args)
{
Channel channel = new Channel("127.0.0.1:5555", ChannelCredentials.Insecure);
var client = new Greet.GreetClient(channel);
var replay = client.SayHello(new HelloRequest { Name = "Auto" });
Console.WriteLine($"{replay.Message}");
channel.ShutdownAsync().Wait();
Console.ReadLine();
}
}
}
運行結果

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/158983.html
標籤:其他
上一篇:ensp的ospf小實驗
