首页 > 其他分享 >【dotnet】啥?这家伙写gRpc 居然没有pb文件

【dotnet】啥?这家伙写gRpc 居然没有pb文件

时间:2023-12-29 11:13:44浏览次数:33  
标签:gRpc 代码 pb Grpc gRPC dotnet using NET 客户端

使用 .NET 的代码优先 gRPC 服务和客户端

当整个系统使用 .NET 时,代码优先是一个不错的选择:

  • 可以在 .NET 服务器和客户端之间共享 .NET 服务和数据协定类型。
  • 无需在 .proto 文件和代码生成过程中定义协定。

不建议在具有多种语言的 polyglot 系统中使用代码优先。 .NET 服务和数据协定类型不能与非 .NET 平台一起使用。 其他平台若要调用使用代码优先编写的 gRPC 服务,必须创建一个与该服务匹配的 .proto 协定。

1.使用protobuf-net.Grpc创建接口

protobuf-net.Grpc 是一个社区项目,不受 Microsoft 支持。 它将对 Grpc.AspNetCore 和 Grpc.Net.Client 添加代码优先支持。 它使用通过属性批注的 .NET 类型来定义应用的 gRPC 服务和消息。

using ProtoBuf.Grpc;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Threading.Tasks;

namespace Shared.Contracts;

[DataContract]
public class HelloReply
{
    [DataMember(Order = 1)]
    public string Message { get; set; }
}

[DataContract]
public class HelloRequest
{
    [DataMember(Order = 1)]
    public string Name { get; set; }
}

[ServiceContract]
public interface IGreeterService
{
    [OperationContract]
    Task<HelloReply> SayHelloAsync(HelloRequest request,
        CallContext context = default);
}

前面的代码:

  • 定义 HelloRequest 和 HelloReply 消息。
  • 定义 IGreeterService 协定接口。

服务协定在服务器上实现并从客户端调用。

2.创建 gRPC 服务端

若要将 gRPC 代码优先服务添加到 ASP.NET Core 应用,请执行以下步骤:

  • 添加一个 protobuf-net.Grpc.AspNetCore 包引用。

  • 创建一个新的 GreeterService.cs 文件并实现 IGreeterService 服务接口:

    using Shared.Contracts;
    using ProtoBuf.Grpc;
    
    public class GreeterService : IGreeterService //引用第一步的接口
    {
        public Task<HelloReply> SayHelloAsync(HelloRequest request, CallContext context = default)
        {
            return Task.FromResult(
                    new HelloReply
                    {
                        Message = $"Hello {request.Name}"
                    });
        }
    }
    更新 Program.cs 文件:
  • using ProtoBuf.Grpc.Server;
    
    var builder = WebApplication.CreateBuilder(args);
    
    // Additional configuration is required to successfully run gRPC on macOS.
    // For instructions on how to configure Kestrel and gRPC clients on macOS, visit https://go.microsoft.com/fwlink/?linkid=2099682
    
    // Add services to the container.
    builder.Services.AddCodeFirstGrpc();
    
    var app = builder.Build();
    
    // Configure the HTTP request pipeline.
    app.MapGrpcService<GreeterService>();
    app.MapGet("/", () => "Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");
    
    app.Run();

    前面突出显示的代码更新以下内容:

    • AddCodeFirstGrpc 注册启用了代码优先的服务。
    • MapGrpcService<GreeterService> 添加代码优先的服务终结点。

3.创建代码优先 gRPC 客户端

代码优先 gRPC 客户端使用服务协定来调用 gRPC 服务。

  • 更新客户端 program.cs

    // See https://aka.ms/new-console-template for more information
    using Grpc.Net.Client;
    using ProtoBuf.Grpc.Client;
    using Shared.Contracts;
    
    namespace GrpcGreeterClient;
    
    internal class Program
    {
        private static async Task Main(string[] args)
        {
            using var channel = GrpcChannel.ForAddress("https://localhost:7184");
            var client = channel.CreateGrpcService<IGreeterService>();//引用第一步的接口
    
            var reply = await client.SayHelloAsync(
                new HelloRequest { Name = "GreeterClient" });
    
            Console.WriteLine($"Greeting: {reply.Message}");
            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }

前面的 gRPC 客户端 Program.cs 代码执行以下操作:

  • 创建一个 gRPC  channel。
  • 使用 CreateGrpcService<IGreeterService> 扩展方法从通道创建代码优先客户端。
  • 使用 SayHelloAsync 调用 gRPC 服务。

查看原文

 

标签:gRpc,代码,pb,Grpc,gRPC,dotnet,using,NET,客户端
From: https://www.cnblogs.com/xuxml/p/17934326.html

相关文章

  • PM2部署DotNet应用程序
    pm2简介PM2是一个Node.js的进程管理工具,可以帮助开发者简化Node.js应用的部署和运维。它提供了进程守护、负载均衡、日志管理等功能,可以监控应用程序的运行状态,并在发生意外情况时自动重启应用。PM2还支持多种部署方式,包括单机部署、集群模式和Docker容器部署,适用于各种规模的项......
  • dotnet命令
    dotnetbuild生成.NET应用程序。dotnetbuild-server与通过生成启动的服务器进行交互。dotnetclean清除生成输出。dotnetexec运行.NET应用程序。dotnethelp显示命令更详细的在线文档。dotnetmigrate将有效的预览版2项目迁移到.NETCoreSDK1.......
  • 【大模型】快速体验百度智能云千帆AppBuilder搭建知识库与小助手
    文章目录前言千帆AppBuilder什么是千帆AppBuilderAppBuilder能做什么体验千帆AppBuilderJava知识库高考作文小助手总结前言前天,在【百度智能云智算大会】上,百度智能云千帆AppBuilder正式开放服务。这是一个AI原生应用开发工作台,可以满足企业对敏捷和高效地进行AI原生应用开发与运......
  • PBR纹理贴图类型详解
    在线工具推荐:3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.jsAI自动纹理开发包 - YOLO虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎PBR纹理是一种帮助3D艺术家使他们的3D渲染看起来更逼真的技术。与其他着色......
  • PBKDF2(Password-Based Key Derivation Function 2)算法
    一、引言在当今数字时代,保护用户数据和隐私的安全变得越来越重要。为实现这一目标,加密和密钥管理技术发挥着关键作用。PBKDF2(Password-BasedKeyDerivationFunction2)算法作为一种基于密码的密钥生成方法,广泛应用于各种安全场景。本文将从各个方面介绍和解释PBKDF2算法,剖......
  • [转][译] 密码哈希的方法:PBKDF2,Scrypt,Bcrypt 和 ARGON2
    原文地址:PasswordHashing:PBKDF2,Scrypt,BcryptandARGON2原文作者:MichelePreziuso译文出自:掘金翻译计划本文永久链接:https://github.com/xitu/gold-miner/blob/master/TODO1/password-hashing-pbkdf2-scrypt-bcrypt-and-argon2.md译者:司徒公子校对者:xionglong58、GJX......
  • gRPC .proto文件解析
    .proto文件解析书接上回,创建了hello_grpc.proto文件后对其中参数进行解释,还是以上次的代码为案例syntax="proto3";optiongo_package="./;hello_grpc";packagehello_grpc;messageReq{stringmessage=1;}messageRes{stringmessage=1;}serviceHell......
  • 三十九、配置 PE 与 CE 间部署 IS-IS 的 MPBGP MPLS VPN 实验
    1、实验拓扑图2、实验目的ce1与ce3为同一个公司,通过BGP网络实现互联;ce2与ce4为同一个公司,通过BGP网络实现互联。3、实验步骤3.1配置bgp网络3.1.1为BGP网络配置IGPisis200network-entity49.0001.0010.0100.1001.00//配置isis的网络实体名称area+system+netcost-stylewideis-leve......
  • Grpc的内部原理、优缺点
    gRPC是一个高性能、开源和通用的RPC框架,面向移动和HTTP/2设计。gRPC默认使用protocolbuffers,这是Google开源的一套成熟的结构数据序列化机制(也可使用其他数据格式如JSON)基于go的一种远程过程调用,RPC框架的目标就是让远程服务调用更加简单、透明,RPC框架负责屏蔽底......
  • [转]PBKDF2函数,比「Hash加盐」更好的口令保护方案
    原文地址:PBKDF2函数,比「Hash加盐」更好的口令保护方案-简书在前面两篇文章中,对用户口令进行加密的方式其实称为Password-basedencryption(PBE),算法实现很简单,那是不是有更好和更标准的PBE实现呢?基于Hash+salt的算法最大的问题在于Hash函数的运算太快了,虽然加盐让......