项目添加引用
Install-Package Grpc
Install-Package Google.Protobuf
Install-Package Grpc.Tools
定义helloworld.proto
syntax = "proto3";
package gRPCDemo;
service gRPC {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
生成Helloworld.cs及HelloworldGrpc.cs类
C:\Users\用户\.nuget\packages\grpc.tools\2.37.0\tools\windows_x64\protoc --csharp_out . helloworld.proto --grpc_out . --plugin=protoc-gen-grpc=C:\Users\用户\.nuget\packages\grpc.tools\2.37.0\tools\windows_x64\grpc_csharp_plugin.exe
网上的例子是
packages\Grpc.Tools.1.0.0\tools\windows_x86\protoc.exe -IgRPCDemo --csharp_out gRPCDemo gRPCDemo\helloworld.proto --grpc_out gRPCDemo --plugin=protoc-gen-grpc=packages\Grpc.Tools.1.0.0\tools\windows_x86\grpc_csharp_plugin.exe
需要使用visual studio,在PM命令行中使用。我的使用Rider,未找到PM命令行,所以使用绝对路径执行
工程demo
class gRPCImpl : gRPC.gRPCBase
{
public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
{
return Task.FromResult(new HelloReply {Message = "Hello " + request.Name});
}
}
static void Main(string[] args)
{
int Port = 9007;
Server server = new Server
{
Services = {gRPC.BindService(new gRPCImpl())},
Ports = {new ServerPort("localhost", Port, ServerCredentials.Insecure)}
};
server.Start();
Channel channel = new Channel("127.0.0.1:"+Port, ChannelCredentials.Insecure);
var client = new gRPC.gRPCClient(channel);
var reply = client.SayHello(new HelloRequest {Name = "xxx"});
Console.WriteLine("返回结果: "+reply.Message);
}