.NET6中使用GRPC的示例代码

 更新时间:2023年06月19日 11:24:42   作者:故里2130  
本文主要介绍了.NET6中使用GRPC的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • asp.net mvc CodeFirst模式数据库迁移步骤详解

    asp.net mvc CodeFirst模式数据库迁移步骤详解

    这篇文章主要为大家详细介绍了asp.net mvc CodeFirst模式数据库迁移步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • 快速入门ASP.NET Core看这篇就够了

    快速入门ASP.NET Core看这篇就够了

    ASP.NET Core 是一个由微软创建的,用于构建 web 应用、API、微服务 的 web 框架。通过本文的学习就能快速的入门ASP.NET Core,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 详解c# .net core 下的网络请求

    详解c# .net core 下的网络请求

    本篇文章主要介绍了详解c# .net core 下的网络请求,大致介绍下在.net core 下如何进行http请求,主要仍然是GET和POST方法,有兴趣的可以了解下
    2017-05-05
  • ASP.NET缓存的方法和最佳实践

    ASP.NET缓存的方法和最佳实践

    您应该在应用程序的每一层都实现缓存。向数据层、业务逻辑层、UI 或输出层添加缓存支持。内存现在非常便宜 — 因此,通过以智能的方式在整个应用程序中实现缓存,可以获得很大的性能提高
    2012-04-04
  • ASP.NET MVC制作404跳转实例(非302和200)

    ASP.NET MVC制作404跳转实例(非302和200)

    本篇文章主要介绍了ASP.NET MVC制作404跳转实例(非302和200) ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • MVC5下拉框绑定的方法(单选)

    MVC5下拉框绑定的方法(单选)

    这篇文章主要为大家详细介绍了MVC5下拉框绑定,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • asp.net中JavaScript数据验证实现代码

    asp.net中JavaScript数据验证实现代码

    我对JavaScript一直不了解。常常为了一点点的数据验证和无刷新就去动用AJAX,实在不爽——有点杀鸡用牛刀的感觉。
    2010-05-05
  • 一步步打造简单的MVC电商网站BooksStore(2)

    一步步打造简单的MVC电商网站BooksStore(2)

    这篇文章主要和大家一起一步步打造一个简单的MVC电商网站,MVC电商网站BooksStore第二篇,添加分类导航、加入购物车,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • asp.net下实现URL重写技术的代码

    asp.net下实现URL重写技术的代码

    asp.net下实现URL重写技术的代码...
    2007-10-10
  • .Net 如何限制用户登录的方法

    .Net 如何限制用户登录的方法

    这篇文章主要介绍了.Net 如何限制用户登录的方法,有需要的朋友可以参考一下
    2013-12-12

最新评论