.net7 通过 JsonTranscoding 实现 gRPC 与 Web API 一鱼两吃

news2024/11/19 15:34:39

目标

    在一个网站内,用一套proto即提供gPRC 调用,又提供 Web API 调用。

实现方法

    根据微软官方James Newton King(Newtonsoft.json 作者)的文章,.net7 里面提供了 JsonTranscoding 特性,只需要三步(翻译自链接中的文档):

  1. 第一步用vs2022创建一个 .net7的 gRPC service Create a gRPC client and service
  2. 第二步,添加nuget包 Microsoft.AspNetCore.Grpc.JsonTranscoding。在服务的 startup.cs 文件里添加一句 services.AddGrpc().AddJsonTranscoding();
  3. 最后在 proto 文件里面加上 import "google/api/annotations.proto"; 要求将 annotations.proto 和 http.proto 两个文件下载放到你的proto文件所在文件夹下的 google/api 子文件夹中。

    另外,可以观看我翻译配音的 James Newton King 的专题讲座.NET Conf 2022: .NET7 gRPC 性能提升同时兼具Web API。

上手比划

    主要是找不到 google/api 文件夹编译报错,确保在自己proto文件相同的文件夹下就行了,不用额外安装google的其他包,下面是我的文件夹结构:

    在我自己定义的schedulerpc.proto文件中,加上了 import "google/api/annotations.proto";

syntax = "proto3";

import "common.proto";
import "google/protobuf/wrappers.proto";
import "google/api/annotations.proto";

option csharp_namespace = "Easy.Flownet.Services";

service ScheduleRPC {
  rpc GetVariables (RequestName) returns (VariableInfoList){
	option(google.api.http)={
	  get:"/schedule/{name}"
	};
  }
}

     在gRPC服务里面进行了方法实现:

    public class ScheduleService : ScheduleRPC.ScheduleRPCBase
    {
        public ScheduleService() : base()
        {
        }

        public override Task<VariableInfoList> GetVariables(RequestName request, ServerCallContext context)
        {
            //实现代码
        }
    }

      在startup.cs(或program.cs)中加上了

services.AddGrpc().AddJsonTranscoding();

     并注册了ScheduleService 服务

endpoints.MapGrpcService<ScheduleService>();

运行

    启动gRPC服务后,在浏览器中键入我在schedulerpc.proto文件中给GetVariables指定的url地址,http://localhost:5002/schedule/{name} 正确返回了json。

    然后我立刻删除了单独创建的web api项目,也不用再为gRPC与web api之间的互操作烦恼了,因为都在一个项目里,是不是很爽啊?!感谢James Newton King!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/492150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

听我一句劝,别去外包,干了6年,废了....

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了6年的功能测试&…

NANK OE骨传导开放式蓝牙耳机发布,极致体验拉满!

近日&#xff0c;中国专业音频品牌NANK南卡发布了全新一代——骨传导开放式蓝牙耳机NANK OE&#xff0c;耳机采用了传统真无线和骨传导的结合方式&#xff0c;带来更加舒适的佩戴体验和音质升级&#xff0c;同时还支持单双耳自由切换&#xff0c;全新的设计收获了市场的喜爱和认…

SignOff Criteria——POCV(Parametric OCV) introduction

文章目录 1. O v e r v i e w Overview Overview2. P O C V A n a l y s i s POCV\ Analysis POCV Analysis3. P O C V F l o w POCV\ Flow POCV Flow4. P O C V R e p o r t POCV\ Report POCV Report 1. O v e r v i e w Overview Overview P r o c e s s v a r i a t i…

数据发送流程

在发送模式下&#xff0c;UART 的串行数据发送电路主要包括一个发送移位寄存器(TSR)&#xff0c;TSR 功能是将数据 逐个移位送出。待发数据必须先写到发送缓冲区中。 TXIFx 是发送中断标志位&#xff0c;可配置为发送缓冲区空或TSR 空。 数据的发送支持7bit 、8bit 或9bit 数据…

JavaScript原型链污染学习记录

1.JS原型和继承机制 0> 原型及其搜索机制 NodeJS原型机制&#xff0c;比较官方的定义&#xff1a; 我们创建的每个函数都有一个 prototype&#xff08;原型&#xff09;属性&#xff0c;这个属性是一个指针&#xff0c;指向一个对象&#xff0c; 而这个对象的用途是包含可…

为什么用Selenium做自动化测试,你真的知道吗?

目录 手工测试的问题 为什么用自动化 选择合适的测试方式 什么时候引入自动化测试 以Jmeter为代表的测试工具 编程能力既重要又不重要 为什么是Selenium 没有最好的技术&#xff0c;只有合适的技术 web自动化测试效率不高 手工测试的问题 手工操作点点点借助的是人脑的…

知识变现海哥|这3种课程定价最容易爆单

这3种课程定价最容易爆单 一门课怎么才能卖到100万&#xff0c;定价很关键。我卖了160万的课&#xff0c;总结了3种课程定价&#xff0c;组合起来最容易爆单&#xff01;引流课定价0、1、9.9、19.9一般讲3天结束&#xff0c;用低价吸引大量潜在学员 信任课定价99、699、999等…

C++—非递归【循环】遍历二叉树(前序,中序,后序)思路讲解+代码实现

非递归遍历二叉树 前序中序后序 接下来我们在研究如何使用循环实现遍历二叉树时&#xff0c;以下面的二叉树为例&#xff1a; 在下文的讲解中&#xff0c;不对如何构建这颗二叉树做讲解&#xff0c;直接给出代码&#xff0c;如果有不懂的地方欢迎私信我。 文章中的完整源代码链…

一篇文章搞定《Android内存泄漏》

------《Android内存泄漏》 什么是内存泄漏常见的内存泄漏以及规避方式单例模式引用Activity非静态内部类注册的反注册定时器TimerWebView的内存泄漏资源未关闭属性动画 怎么定位内存泄漏LeakCanary接入&#xff1a;使用&#xff1a;检测&#xff1a; Android Proflier开始检测…

Linux驱动编程(分层分离编程思想)

1、面向对象 ⚫ 字符设备驱动程序抽象出一个 file_operations 结构体&#xff1b; ⚫ 我们写的程序针对硬件部分抽象出 led_operations 结构体。 2、分层 上层实现硬件无关的操作&#xff0c;比如注册字符设备驱动&#xff1a;leddrv.c 下层实现硬件相关的操作&#xff0c;比如…

【R语言】鉴于计算10亿以内训练模型记录for循环的加速

文章目录 1 前言2 几个循环2.1 100以内的和2.2 100以内奇数和/偶数和 3 多重循环3.1 向量化3.2 合并循环3.3 apply函数3.4 矩阵运算3.5 foreach分解任务 4 讨论 1 前言 笔者主力机是MBAM1芯片&#xff08;8256&#xff09;&#xff0c;某个下午巩固循环突然思考到个问题&#…

App违反Google数据安全政策,解决方案

前言 google隐私政策阶段性会进行更新&#xff0c;时长关注隐私政策变化&#xff0c;避免app被强制下架&#xff0c;影响后续运营工作。 邮件内容 摘录邮件详情 我们在以下区域发现了问题&#xff1a; SPLIT_BUNDLE 2:政策声明&#xff0c;数据安全部分&#xff1a;“https:…

中国社科院与美国杜兰大学金融管理硕士项目,引领你走在金融行业前沿

作为金融领域从业人员时刻都在关注行业最新资讯&#xff0c;只有掌握一手的前沿讯息&#xff0c;才能在职场上无往不胜。针对在职的你&#xff0c;如何利用业余时间让自己更增值呢&#xff0c;中国社科院与美国杜兰大学金融管理硕士项目引领你走在金融行业前沿。 金融管理硕士…

ecology9-嵌入第三方系统,特定情况下在嵌套页提示“登录超时,请重新登录”

ecology9-嵌入第三方系统&#xff0c;特定情况下在嵌套页提示“登录超时&#xff0c;请重新登录” 问题描述尝试1尝试2尝试3√尝试4参考 问题描述 A系统对接了ecology9的单点登录。A系统在某个边栏菜单嵌入ecology9的流程页面。当清空浏览器缓存时&#xff0c;A系统在单点登录…

从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题

目录 1. 日期类详细实现 1.1 构造函数和打印函数 1.2 六个比较运算符重载 1.3 日期天数 和 日期天数 1.4 日期 - 天数 和 日期 - 天数 1.5 日期 和 日期 1.6 日期-- 和 --日期 1.7 日期 - 日期 operator- 1.8 打印*this是星期几 2. 日期类完整代码 Date.h: Date.…

计算机智能系统有哪些SCI期刊? - 易智编译EaseEditing

计算机智能系统是计算机科学中的一个重要分支&#xff0c;其主要研究计算机智能和人工智能等方面的问题。以下是一些SCI期刊的推荐&#xff1a; IEEE Transactions on Neural Networks and Learning Systems&#xff1a; 该期刊是IEEE计算智能学会的官方期刊&#xff0c;涵盖了…

JavaWeb——数据链路层详解

目录 一、以太网 1、定义 2、以太网格式帧 二、MTU 1、定义 2、MTU对IP协议的影响 3、MTU对UDP协议的影响 4、MTU对TCP协议的影响 三、ARP协议 1、定义 2、ARP协议的作用 3、ARP协议的工作流程 一、以太网 1、定义 "以太网" 不是一种具体的网络&#xff…

谷歌浏览器 | Chrome DevTools系统学习篇-概述

Chrome DevTools是一套直接内置到谷歌Chrome浏览器的web开发工具。DevTools可以帮助您即时编辑页面并快速诊断问题&#xff0c;最终帮助您更快地构建更好的网站。我们今天的概述主要讲述谷歌浏览器的日常使用和几大常见控制面板的介绍。 目录 1.打开谷歌浏览器 2.谷歌浏览器的…

MySQL 页、页结构、页目录、索引

MySQL中&#xff0c;数据存到了什么地方&#xff1f; 存储到了硬盘的文件上&#xff0c;被称为&#xff1a;数据文件 或 表空间 每个数据库都是由 一组数据文件 组成&#xff0c;这些文件包含了&#xff1a;所有表、索引、其他相关对象的数据 MySQL 以什么样的方式访问&#…

安卓联发科MT6737手机开发核心板 开发模块

MT6737核心板是一款基于联发科MT6737T平台高性能、可运行安卓操作系统的4G智能模块。它支持多种制式&#xff0c;包括LTE-FDD/LTE-TDD/WCDMA/TD-SCDMA/EVDO/CDMA/GSM等。此外&#xff0c;它还支持WiFi 802.11a/b/g/n和BT4.0LE近距离无线通信&#xff0c;并支持GPS/GLONASS/北斗…