【C# .Net Framework】在.Net Framework中使用gRPC

本文介绍了如何在Visual Studio 2019中使用.NET Framework 4.7.2手动创建gRPC服务和客户端。通过安装Google.Protobuf、Grpc.Core和Grpc.Tools等NuGet包,然后编写.proto文件定义服务协议,最后生成并实现服务类,完成gRPC服务器和客户端的搭建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随着.Net Core 3.0及后续版本的出现,微软似乎正在放弃极具Windows特征的WCF。作为WCF的替代者,VS Code 或VS2019已经有基于.Net Core 3.0平台的“gPRC项目模板”。这个模板极大地简化了gRPC的开发过程。

gRPC也可应用于.Net Framework。由于VS2019没有提供基于.Net Framework平台的“gPRC项目模板”,开发者需要用手工方式处理。本文采用VS2019,以.Net Framework 4.7.2为例,描述gPRC的实现步骤。

步骤一、 创建解决方案及项目

  1.  Greeter,.Net Framework4.7.2类库项目,定义服务器与客户端之间服务协议
  2.  GreeterServer,.Net Framework4.7.2控制台程序,gRPC服务端,提供gPRC服务
  3.  GreeterClinet,.Net Framework4.7.2控制台程序,gRPC客户端,调用GreetServer提供的服务

步骤二、NuGet获取程序包

1. 在“解决方案gRPCDemo”鼠标右键,“管理解决方案的NuGet程序包”

2. 安装“Google.ProtoBuf”

3. 安装“Grpc.Core”

4.安装“Grpc.Tools”

步骤三、编写服务协议并生成服务类(此步骤需手工处理)

1. 在类库项目“Greeter”中添加“helloworld.proto”文件,输入以下服务定义。

syntax = "proto3";

package Greeter;

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

message HelloRequest {
	string name = 1;
}

message HelloReply {
	string message = 1;
}

2. 生成服务类

在“解决方案”上点击鼠标右键,“在文件资源管理器中打开文件夹”

输入以下命令,将“hello.proto”转换为服务类

packages\Grpc.Tools.2.32.0\tools\windows_x86\protoc.exe -I Greeter --csharp_out Greeter Greeter\hello.proto --grpc_out Greeter --plugin=protoc-gen-grpc=packages\Grpc.Tools.2.32.0\tools\windows_x86\grpc_csharp_plugin.exe

3. 将生成的服务类Hello.cs和HelloGrpc.cs添加到“Greeter”项目中

4. 编译类库“Greeter”

步骤四、编写服务端

1. 添加类库项目Greeter引用

2. 服务端代码

using Greeter;
using Grpc.Core;
using System;
using System.Threading.Tasks;

namespace GreeterServer
{
    class Program
    {
        static void Main(string[] args)
        {
            const int port = 5555;
            Server server = new Server
            {
                Services = { Greet.BindService(new GreetImpl()) },
                Ports = { new ServerPort("localhost", port, ServerCredentials.Insecure) }
            };
            server.Start();

            Console.WriteLine($"Greeter Server Listening on port {port}");
            Console.WriteLine("Press Enter to exit");
            Console.ReadLine();

            server.ShutdownAsync().Wait();

        }
    }

    class GreetImpl: Greet.GreetBase
    {
        public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
        {
            return Task.FromResult(new HelloReply { Message = $"Hello {request.Name}" });
        }
    }
    
}

步骤五、编写客户端代码

1. 添加类库项目Greeter引用

2. 客户端代码

using Greeter;
using Grpc.Core;
using System;

namespace GreeterClient
{
    class Program
    {
        static void Main(string[] args)
        {
            Channel channel = new Channel("127.0.0.1:5555", ChannelCredentials.Insecure);
            var client = new Greet.GreetClient(channel);
            var replay = client.SayHello(new HelloRequest { Name = "Auto" });
            Console.WriteLine($"{replay.Message}");

            channel.ShutdownAsync().Wait();
            Console.ReadLine();
        }
    }
}

运行结果

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值