.net grpc proto 文件生成

1:首先使用vs创建proto文件,例如:我创建的my.proto文件如下:

syntax = "proto3";


package MyGrpc;

//服务名称

service MsgService {

//函数名称  (入参)retrurns(出参)
rpc Send (MsgRequest) returns (MsgResponse);
}

message MsgRequest{
string req=1;//定义入参实体
}
message MsgResponse{
string res=1;//定义出参实体
}

2:nuget下载Grpc.Core、Google.Protobuf

3:找到项目中packages文件夹目录,在该目录上输入cmd,

然后输入命令:

packages\Grpc.Tools.2.39.1\tools\windows_x64\protoc.exe (程序路径)

-I Protos(-I 指定一个或者多个目录,用来搜索.proto文件的,如果不指定,那就是当前目录,因为-I已经指定了Protos,所以是找Protos目录下的.proto文件。)

--csharp_out Protos (生成C#代码的路径,代码生成在Protos目录下)

Protos\my.proto(proto文件地址)

--grpc_out Protos(输出路径)

--plugin=protoc-gen-grpc=packages\Grpc.Tools.2.39.1\tools\windows_x64\grpc_csharp_plugin.exe

完整的语句:

packages\Grpc.Tools.2.39.1\tools\windows_x64\protoc.exe -I Protos --csharp_out Protos Protos\my.proto --grpc_out Protos --plugin=protoc-gen-grpc=packages\Grpc.Tools.2.39.1\tools\windows_x64\grpc_csharp_plugin.exe

执行完毕后会在指定的文件夹中生成两个文件

服务端:

Server server = new Server
{
Services = { MyGrpc.MsgService.BindService(new FirstGrpc()) },
Ports = { new ServerPort("127.0.0.1", 18201, ServerCredentials.Insecure) }
};

server.Start();
Console.Read();
server.ShutdownAsync().Wait();

public class FirstGrpc : MsgService.MsgServiceBase
{
public override Task<MsgResponse> Send(MsgRequest request, ServerCallContext context)
{        return Task.FromResult(new MsgResponse { Res = $"1" });

}

}

客户端:

Channel channel = new Channel("127.0.0.1:18201", ChannelCredentials.Insecure);
var client = new MsgService.MsgServiceClient(channel);

var replay = client.Send(new MsgRequest { Req = “内容” });

channel.ShutdownAsync().Wait();


版权声明:本文为jixiaomeng821原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。