接第01部分,本节用来说明C#语言的代码实现。
使用Protoc.exe生成cs代码之后,会生成两个cs文件,Client与Server都需要包含这两个文件。
首先是Server端:
1、新建一个Console项目,引用Protoc程序集中以下几个dll文件,并添加生成的CS文件
Google.Protobuf.dll
Grpc.Core.dll
System.Interactive.Async.dll
2、新建一个类MyGRPCServer,实现JustATest.IJustATest接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Com.Neohope.Protobuf.Grpc.Test;
using Grpc.Core;
namespace TestProtoBufferCliet
{
class MyGRPCServer : JustATest.IJustATest
{
public Task<AddResponse> Add(AddRequest request, ServerCallContext context)
{
AddResponse rsp = new AddResponse();
rsp.C = request.A + request.B;
return Task.FromResult(rsp);
}
public Task<HelloResponse> SayHelloTo(Person request, ServerCallContext context)
{
HelloResponse rsp = new HelloResponse();
rsp.Rsp = "Hello " + request.Name;
return Task.FromResult(rsp);
}
}
}
3、修改Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Com.Neohope.Protobuf.Grpc.Test;
using Grpc.Core;
using TestProtoBufferCliet;
namespace TestProtoBuffer
{
class Program
{
static void Main(string[] args)
{
Server server = new Server
{
Services = { JustATest.BindService(new MyGRPCServer()) },
Ports = { new ServerPort("localhost", 1900, ServerCredentials.Insecure) }
};
server.Start();
}
}
}
4、编译运行
其中,非托管dll要如下放置
.
│ yourprogram.exe
│
└─nativelibs
├─windows_x64
│ grpc_csharp_ext.dll
│
└─windows_x86
grpc_csharp_ext.dll
然后是Client端:
1、新建一个Console项目,引用Protoc程序集中以下几个dll文件,并添加生成的CS文件
Google.Protobuf.dll
Grpc.Core.dll
System.Interactive.Async.dll
2、修改Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Com.Neohope.Protobuf.Grpc.Test;
using Grpc.Core;
namespace TestProtoBufferCliet
{
class Program
{
static void Main(string[] args)
{
Channel channel = new Channel("127.0.0.1:1900", ChannelCredentials.Insecure);
JustATest.JustATestClient client = JustATest.NewClient(channel);
Person p = new Person();
p.Name = "neohope";
p.Age = 30;
p.Sex = Person.Types.SexType.MALE;
HelloResponse prsp = client.SayHelloTo(p);
Console.WriteLine(prsp.Rsp);
AddRequest areq = new AddRequest();
areq.A = 1;
areq.B = 2;
AddResponse arsp = client.Add(areq);
Console.WriteLine(arsp.C);
channel.ShutdownAsync().Wait();
Console.ReadLine();
}
}
}
3、编译运行
其中,非托管dll要如下放置
.
│ yourprogram.exe
│
└─nativelibs
├─windows_x64
│ grpc_csharp_ext.dll
│
└─windows_x86
grpc_csharp_ext.dll