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  --  安全問題
 
 

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