接第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