在 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 Task<HelloReply> SayHello(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服务端:
结果如下图: