在 Visual Studio Community 中"新建项目"->"类库",名称填写"Greeter",解决方案名称填写"helloworld",如下图:
删除自动生成的类“class1.cs”:
新建一个文件名称为"helloworld.proto",内容如下:
syntax = "proto3";package helloworld;// 服务端定义service Greeter {// 服务端返馈信息方法rpc SayHello (HelloRequest) returns (HelloReply) {}}// 包含用户名的请求信息message HelloRequest {string name = 1;}// 服务端响应信息message HelloReply {string message = 1;}
开启"程序包管理器控制台",位置如下图:
使用下面命令引入gRPC包:
Install-Package Grpc
Install-Package Google.Protobuf
Install-Package Grpc.Tools
在"helloworld"目录下执行如下命令:
packages\Grpc.Tools.1.0.0\tools\windows_x64\protoc.exe -IGreeter --csharp_out Greeter Greeter/helloworld.proto --grpc_out Greeter --plugin=protoc-gen-grpc=packages\Grpc.Tools.1.0.0\tools\windows_x64\grpc_csharp_plugin.exe
执行结果如下图:
右键单击项目名称“Greeter”,把自动生成的两个文件"HelloworldGrpc.cs"和"Helloworld.cs" 加入项目中:
在根项目中右击添加新项目:
选择“控制台应用程序”,项目名称命名为“GreeterServer”:
在程序包管理器控制台把默认项目改为“GreeterServer”
在控制台执行如下命令导入gRPC动态库:
Install-Package Grpc
在“GreeterServer”里引入项目“Greeter”
在“GreeterServer”下的“Program.cs”填写如下代码:
using System;using System.Threading.Tasks;using Grpc.Core;using Helloworld;namespace GreeterServer{ class GreeterImpl : Greeter.GreeterBase { // 服务端RPC的SayHello操作方法 public override TaskSayHello(HelloRequest request, ServerCallContext context) { return Task.FromResult(new HelloReply { Message = "你好 " + request.Name }); } } class Program { const int Port = 50051; public static void Main(string[] args) { Server server = new Server { Services = { Greeter.BindService(new GreeterImpl()) }, Ports = { new ServerPort("localhost", Port, ServerCredentials.Insecure) } }; server.Start(); Console.WriteLine("Greeter server listening on port " + Port); Console.WriteLine("Press any key to stop the server..."); Console.ReadKey(); server.ShutdownAsync().Wait(); } }}
把“GreeterServer”设为启动项目,如下图:
单击“启动”按钮,启动gRPC服务端:
结果如下图: