【C# .Net Framework】在.Net Framework中使用gRPC
隨著.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();
}
}
}
執行結果
相關文章
- 使用C#檢驗.NET FrameWork版本C#Framework
- .net framework autoMapper使用FrameworkAPP
- .net framework 5.0Framework
- .NET Framework (最新版本到.NET Framework 4.7.2)中的新增功能Framework
- ASP.NET與.NET Framework和C#的關係ASP.NETFrameworkC#
- .NET Framework 4和.NET Framework 4 Client Profile的區別Frameworkclient
- .NET 5 中 Target Framework 詳解Framework
- C# NET framework 4.5呼叫系統Toast通知C#FrameworkAST
- .NET科普:.NET簡史、.NET Standard以及C#和.NET Framework之間的關係C#Framework
- C# 利用.NET 升級助手將.NET Framework專案升級為.NET 6C#Framework
- .NET Framework 工具下載Framework
- .NET Framework 4.8釋出Framework
- 回顧.NET系列:Framework、Net Core、Net 過往Framework
- 使用 .NET 升級助手將.NET Framework應用遷移到.NET 5Framework
- C# 掃描識別圖片中的文字(.NET Framework)C#Framework
- net framework 3.5怎麼安裝 net framework 3.5無法安裝怎麼辦Framework
- .NET Core(.NET6)中gRPC使用RPC
- C# HttpClient使用和注意事項,.NET Framework連線池併發限制C#HTTPclientFramework
- C# .NET Framework 實現SM2加簽、驗籤C#Framework
- Docker容器中執行.net framework控制檯程式DockerFramework
- .NET平臺系列22:.NET Core/.NET5/.NET6 對比 .NET FrameworkFramework
- .net 5+ 知新:【2】 .Net Framework 、.Net 、 .NET Standard的概念與區別Framework
- .NET Framework 4.8 Web API+Entity Framework(實現增刪改查)FrameworkWebAPI
- ABP Framework Consuming HTTP APIs from a .NET ClientFrameworkHTTPAPIclient
- entity framework與ADO.NET 2.0效率Framework
- .NET6 平臺系列2 .NET Framework框架詳解Framework框架
- C# .net framework .net core 3.1 請求引數校驗, DataAnnotations, 自定義引數校驗C#Framework
- ASP.NET Core OData 9的釋出,放棄 .NET FrameworkASP.NETFramework
- .NET6 平臺系列1 .NET發展史之.NET Framework簡介Framework
- .net Framework Web Api 實現多國語FrameworkWebAPI
- .NET平臺系列24:從.NET Framework遷移到.NET Core/.NET5的技術指南Framework
- .NET平臺系列23:.NET Core/.NET5/.NET6 和 .NET Framework 的選擇建議Framework
- .Net MVC5(.Net Framework 4.0+)多語言解決方案MVCFramework
- 觀察者模式與.Net Framework中的委託與事件模式Framework事件
- win10怎麼裝framework4_win10安裝net framework的方法Win10Framework
- win10 如何制裁microsoft .net framework win10怎麼解除安裝frameworkWin10ROSFramework
- 基於NET 6.0 封裝的 Fast.Framework封裝ASTFramework
- .Net Core中使用GrpcRPC