gRPC在c#中的使用(服务端)

原创
2016/10/14 16:09
阅读数 6.8K

在 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服务端:

结果如下图:

展开阅读全文
打赏
0
2 收藏
分享
加载中
更多评论
打赏
0 评论
2 收藏
0
分享
返回顶部
顶部