.NET6中使用GRPC的示例代码

 更新时间:2023年06月19日 11:24:42   作者:故里2130  
本文主要介绍了.NET6中使用GRPC的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

Supported languages | gRPC,官网。至于原理就不说了,可以百度原理之后,然后再结合代码,事半功倍,就能很好理解GRPC了。

一、简单使用

1.使用vs2022创建一个grpc程序,直接就默认值,下一步

2.文件说明

文件1:就是对外面调用的自定义协议,也可以理解是接口,双方必须规定一致性,把写的方法暴露出去。

文件2:就是一般写的方法,业务逻辑。

greet.proto文件

Greeter 定义的服务名字

这里结合下面写的,SayHello方法名字,HelloRequest请求参数,HelloReply返回的参数

3.此时,默认的程序就是一个服务端,那么我们就创建一个客户端去访问它

为了方便我们建立一个控制台程序,实际情况,什么程序都是可以的

4.客户端需要安装3个包

  • Google.Protobuf
  • Grpc.Net.Client
  • Grpc.Tools

5. 然后把服务端的这个文件夹整体拿过来放在客户端下面

这个意思就是,他们有共同的协议,就互通了

6.同理,也把服务端的ItemGroup复制到客户端

把Server改成Client

千万别把上面的替换了,这句在最下面

  <ItemGroup>
    <Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
  </ItemGroup>

7.然后在Program中调用

using Grpc.Net.Client;
using GrpcService1;
namespace ClientGRPC
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string url = "https://localhost:5001";   //https
            using (var channel = GrpcChannel.ForAddress(url))
            {
                var client = new Greeter.GreeterClient(channel);
                var reply = client.SayHello(new HelloRequest()
                {
                    Name = "故里2130"
                });
                Console.WriteLine($"结果:message:{reply.Message}");
            }
            Console.ReadKey();
            //AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);  //http调用
            //string url = "http://localhost:5000";
            //using (var channel = GrpcChannel.ForAddress(url))
            //{
            //    var client = new Greeter.GreeterClient(channel);
            //    var reply = client.SayHello(new HelloRequest()
            //    {
            //        Name = "故里2130"
            //    });
            //    Console.WriteLine($"结果:message:{reply.Message}");
            //}
            //Console.ReadKey();
        }
    }
}

8.效果

这样,我们就完成了,简单的使用过程,和webapi的效果差不多。但是它的速度远远大于webapi。

补充:在IOC注入的方式调用GRPC,后面可以参考源码

二、实际应用

实际中使用,我们应该结合webapi和grpc一起使用的

其实就是把刚才创建的GrpcService1全部迁移到webapi中就行了

1.安装包Grpc.AspNetCore 

2.复制文件

3.创建GreeterService.cs,直接复制就行了

using Grpc.Core;
using GrpcService1;
namespace webapiGRPC.Controllers
{
    public class GreeterService : Greeter.GreeterBase
    {
        private readonly ILogger<GreeterService> _logger;
        public GreeterService(ILogger<GreeterService> logger)
        {
            _logger = logger;
        }
        public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
        {
            return Task.FromResult(new HelloReply
            {
                Message = "Hello " + request.Name
            });
        }
    }
}

4.在Program.cs中注入

using GrpcService1;
using webapiGRPC.Controllers;
namespace webapiGRPC
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);
            // Add services to the container.
            builder.Services.AddControllers();
            // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
            builder.Services.AddEndpointsApiExplorer();
            builder.Services.AddSwaggerGen();
            builder.Services.AddGrpc();
            var app = builder.Build();
            // Configure the HTTP request pipeline.
            //if (app.Environment.IsDevelopment())
            //{
            app.UseSwagger();
            app.UseSwaggerUI();
            //}
            app.UseHttpsRedirection();
            app.UseAuthorization();
            app.MapGrpcService<GreeterService>();
            app.MapControllers();
            app.Run();
        }
    }
}

5.在项目文件中,增加如下代码

然后点击生成

如果报错的话,一定要注意greet.proto中你写的命名空间,命名空间是什么,那么就引用什么,否则继承的时候,一直报错

  <ItemGroup>
    <Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
  </ItemGroup>

所有文件

6.运行webapi和刚才的控制台程序看效果

可以看到,webapi和控制台程序全部通了

此时,我们就可以全部使用了,对自己的软件调用GRPC,增加效率。对外部的软件使用webapi,比较安全

源码:

Net6GrpcService: Net6GrpcService

到此这篇关于.NET6中使用GRPC的示例代码的文章就介绍到这了,更多相关.NET6使用GRPC内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

您可能感兴趣的文章:

相关文章

  • Coolite优化导出Excel文件实现代码

    Coolite优化导出Excel文件实现代码

    Coolite 优化 导出 Excel 文件。可以设定列宽和导出列选择。
    2010-03-03
  • WPF实现渐变淡入淡出的登陆窗口效果

    WPF实现渐变淡入淡出的登陆窗口效果

    这篇文章主要介绍了WPF实现渐变淡入淡出的登陆窗口效果的方法,详细讲述了该效果的实现原理与功能代码,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • asp.net实现利用反射,泛型,静态方法快速获取表单值到Model的方法

    asp.net实现利用反射,泛型,静态方法快速获取表单值到Model的方法

    这篇文章主要介绍了asp.net实现利用反射,泛型,静态方法快速获取表单值到Model的方法,结合实例形式分析了asp.net中反射,泛型,静态方法给model赋值的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • .NET之生成数据库全流程实现

    .NET之生成数据库全流程实现

    这篇文章主要介绍了.NET之生成数据库全流程实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Asp.net中将Word文件转换成HTML的方法

    Asp.net中将Word文件转换成HTML的方法

    这篇文章主要介绍了Asp.net中将Word文件转换成HTML的方法,需要的朋友可以参考下
    2014-08-08
  • Spring.Net框架简介

    Spring.Net框架简介

    这篇文章介绍了Spring.Net框架,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • asp.net datalist 用法

    asp.net datalist 用法

    asp.net datalist 用法,需要的朋友可以参考下。
    2009-08-08
  • 一个基于Asp.Net MVC的权限方案

    一个基于Asp.Net MVC的权限方案

    最近这段时间博客园有几位同学在探讨通用的权限方案,偶闲来无事,也来凑凑热闹,下面简单说一下我的简单解决方案,基于AOP的。由于使用了Asp.Net MVC 开发,可能需要先对MVC有些了解,思路都是差不多的。
    2010-02-02
  • ASP.NET MVC 4使用PagedList.Mvc分页的实现代码

    ASP.NET MVC 4使用PagedList.Mvc分页的实现代码

    本篇文章主要介绍了ASP.NET MVC 4使用PagedList.Mvc分页的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • asp.net 弹出对话框返回多个值

    asp.net 弹出对话框返回多个值

    这是我写的第一篇文章,呵呵。所以写的详细希望能帮到某些兄弟。前段时间做过一个项目。需要用到选择对话框。当单击选择按钮时要弹出一个网页包含GridView。当单击选择时返回GridView中单元格的值。
    2009-11-11

最新评论

?


http://www.vxiaotou.com