WinForm或控制台项目中gRPC服务的创建和调用

写了半天一不小心一个F5刷掉了。
先简略写一下, 详细的看链接:
http://note.youdao.com/noteshare?id=98a546f7469e09247ac7e9163761a729&sub=A437D24BEC924EE9A3BEE8FB3E0C90DD
 
1. 基本步骤说明
创建三个项目,一个是gRPC共用项目, 一个服务端, 和一个客户端。
 
2. 创建共用项目
1)创建类库项目GrpcCommon
2)   nuget添加引用 gRPC.Tools , Google.protobuf, gRPC.Core
3)添加文件 greeter.proto
      
syntax = "proto3";

service Greeter{
	rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest{
	string name = 1;
}

message HelloReply{
	string message = 1;
}

 

4)修改文件greeter.proto的属性
   Protobuf compiler ,  Client and Server
5)生成项目
 
3. 创建服务项目
1)创建控制台项目 GrpcServer
2)添加项目引用(GrpcCommon)
3) 创建服务类 GreeterService
namespace GrpcServer
{
    internal class GreeterService : Greeter.GreeterBase
    {
        public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
        {
            return Task.FromResult(new HelloReply
            {
                Message = "Hello " + request.Name
            });
        }
    }
}

4) 启动服务

//创建服务端与客户端之间的监听ip与端口号
Server server = new Server
{
    Services = { Greeter.BindService(new GreeterService()) },
    Ports = { new ServerPort("localhost", 5001, ServerCredentials.Insecure) }
};
//启动服务端,等待客户端的请求
server.Start();

Console.WriteLine("Greeter server listening on port 5001");
Console.WriteLine("Press any key to stop the server...");
Console.ReadKey();

// Requests server shutdown and when there are no more calls being serviced,
// cleans up used resources. The returned task finishes when shutdown procedure
// is complete.
// It is strongly recommended to shutdown all previously created servers before exiting from the process.

server.ShutdownAsync().Wait(); 

 

 
4. 创建客户端项目
1)创建控制台项目 GrpcClient
2)添加项目引用(GrpcCommon)
3) 添加调用代码

//建立客户端与服务端的通信通道,此ip与端口号由服务端指定
Channel channel = new Channel("127.0.0.1:5001", ChannelCredentials.Insecure);
//创建客户端API接口实例
var client = new Greeter.GreeterClient(channel);
String user = "Richard";
//异步调用服务端的SayHello方法
var reply = await client.SayHelloAsync(new HelloRequest { Name = user });
Console.WriteLine("Greeting: " + reply.Message);
channel.ShutdownAsync().Wait();
Console.ReadKey(); 

 

 
5. 运行测试
1) 设置解决方案属性, 多项目启动, 启动Server和Client项目,注意启动顺序。
2)F5 运行
 
6. TODO  --  安全问题
 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章