.Net之代码优先gRPC服务

介绍

该方式适用于多个服务之前都是**.Net项目**的场景

优点:

  • 可以在 .NET 服务器和客户端之间共享 .NET 服务和数据协定类型。

  • 无需在 .proto 文件和代码生成过程中定义协定。

操作

引用组件

创建一个共享的类库ShareProto,该类库可以被服务端和客户端进行访问,添加下面的包引用

<PackageReference Include="protobuf-net.Grpc" Version="1.0.152" />
<PackageReference Include="protobuf-net.Grpc.AspNetCore" Version="1.0.152" />

protobuf-net.Grpc是一个社区项目,通过属性批注的.Net类型来定义应用的gRPC服务和消息。

服务端

增加一个获取支付信息的grpc服务

[ServiceContract]
public interface IPayProto
{/// <summary>///获取订单服务/// </summary>/// <param name="request"></param>/// <param name="callContext"></param>/// <returns></returns>[OperationContract]Task<PayResult> GetPayInfo(PayVm request, CallContext callContext = default);
}[DataContract]
public class PayVm
{[DataMember(Order = 1)]public string PayOrderNo { get; set; }
}[DataContract]
public class PayResult
{[DataMember(Order = 1)]public string OrderNo { get; set; }[DataMember(Order = 2)]public double Price { get; set; }
}

ServiceContract标识为grpc服务,OperationContract标识为服务下的端点(也可以理解为控制器下的方法),DataContract标识为请求或者返回的对象。DataMember标识为对象下的属性。

创建PayService来实现IPayProto服务接口

public class PayService : IPayProto
{public Task<PayResult> GetPayInfo(PayVm request, CallContext callContext = default){System.Console.WriteLine($"接收到的参数是   {request.PayOrderNo}");return Task.Run(() => new PayResult { OrderNo = request.PayOrderNo, Price = 10.02f });}
}

如果没有实现,客户端调用的时候会提示服务没有实现

ConfigureServices中增加服务注册代码优先

services.AddGrpc();
services.AddCodeFirstGrpc();

Configure中启用服务

app.UseEndpoints(endpoints =>
{endpoints.MapGrpcService<PayService>();endpoints.MapControllers();
});

客户端

客户端引用ShareProto类库

控制台

引用组件

<PackageReference Include="Grpc.Net.Client" Version="2.38.0" />

调用方法

using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = channel.CreateGrpcService<IPayProto>();
var reply = client.GetPayInfo(new PayVm { PayOrderNo = "10" });
Console.WriteLine($"Greeting: {reply.GetAwaiter().GetResult().OrderNo}");

参考文档

官网:https://protobuf-net.github.io/protobuf-net.Grpc

代码优先Grpc服务:https://docs.microsoft.com/zh-cn/aspnet/core/grpc/code-first?view=aspnetcore-3.1

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

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

相关文章

转JS总结1--(CSS书写规范和正则表达式)

一、CSS书写规范&#xff1a; 1、文字&#xff1a;font: font-style font-variant font-weight font-size/line-height font-family; 2、边框&#xff1a;border:border-width border-style border-color; 3、背景&#xff1a;background:background-color background-image ba…

Winform VS2015打包

首先 &#xff0c;我们要去官网http://learn.flexerasoftware.com/content/IS-EVAL-InstallShield-Limited-Edition-Visual-Studio注册一个账号已获得installshiled的注册码。 是免费的~ 注册完后就可以下载我们的第三方打包工具&#xff1a; 注意&#xff1a;这里下载并安装完…

触发键盘_雷蛇这款光轴机械键盘开箱评测,光速触发,颜值爆表

首先感谢头条众测给予雷蛇猎魂光蛛精英版机械键盘的测评机会&#xff0c;雷蛇作为在游戏设备领域深耕的领先者&#xff0c;其生产的游戏设备深得游戏玩家喜爱&#xff0c;下面我们来一睹这款雷蛇机械键盘的风采。首先从包装盒正面可以感受到这款雷蛇光学机械轴键盘霸气侧漏&…

会计电算化的重要物质基础计算机和,湖北工业大学工程技术学院会计电算化管理办法...

湖北工业大学工程技术学院会计电算化管理办法第一章 总则第一条为了进一步加强会计电算化工作&#xff0c;使会计电算化更加规范化、程序化&#xff0c;保障财务工作高效运行&#xff0c;根据《中华人民共和国会计法》、财政部《会计电算化管理办法》和《会计电算化工作规范》等…

spring之使用Spring Security实现权限管理

转载&#xff1a;http://hanqunfeng.iteye.com/blog/1155226 目录 SpringSecurity3.X--一个简单实现 SpringSecurity3.X--前台与后台登录认证 SpringSecurity3.X--remember-me SpringSecurity3.X--验证码 作者对springsecurity研究不深&#xff0c;算是个初学者吧&#xff0c;最…

单元测试之道

Nunit with VS2012: 构建单元测试步骤 1.下载Nunit 2.6.2&#xff0c;解压到某个path&#xff1b; 2.在VS2012 上构建自己的library工程&#xff1b; 3.添加引用&#xff1a;nunit.framework.dll; 4.添加UunitTest类&#xff1a;在该类中using nunit.framework.dll&#xff0c;…

iNeuOS工业互联网操作系统,提升分布式云端控制安全策略和增加实时日志功能...

目 录1. 概述... 22. 平台演示... 23. 云端控制策略和应用过程... 23.1 云端控制策略... 23.2 控制应用过程... 34. 实时日志... 71. 概述这次升级主要提升云端控制的安全策略&#xff0c;不管公有云部署或是私有云部署&#…

直男的回答能多出乎意料?

1 我家的鸭子没这么扁&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 这个回答&#xff0c;妙啊...&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 强迫症犯人要求判10年▼4 像羊又像猫&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼5 美女…

Angularjs调用公共方法与共享数据

这个问题场景是在使用ionic开发页面的过程中发现&#xff0c;多个页面对应的多个controller如何去调用公共方法&#xff0c;比如给ionic引入了toast插件&#xff0c;如何将这个插件的调用变成公共方法或者设置成工具类&#xff0c;因为在每个controller中直接注入这个toast插件…

如何修改pfpj的服务器,如何更改布局?

您可以使用一个布局和一个活动。你必须隐藏/显示你的布局按钮click.i已经实现了它。你可以尝试下面的code.may它会帮助你。main.xml中android:layout_width"match_parent"android:layout_height"match_parent"android:orientation"vertical" >…

栈与队列之用java实现队列

队列 介绍&#xff1a; 队列是一种特殊的线性表&#xff0c;特殊之处在于它只允许在表的前端(front)进行删除操作&#xff0c;而在表的后端(rear)进行插入操作&#xff0c;和栈一样&#xff0c;队列是一种操作受限制的线性表。进行插入操作的端称为队尾&#xff0c;进行删除操…

mysql去掉两个最高分_数据分析系列 16/32 | MySQL中子查询与联合查询

前面说了很多MySQL中的查询&#xff0c;比如条件查询、分组聚合查询、连接查询&#xff0c;今天来说一下另外两个非常的重要的查询&#xff0c;MySQL中的子查询和联合查询。PART01子查询子查询也称嵌套查询&#xff0c;是将一个查询语句嵌套在另一个查询语句的WHERE子句或者HAV…

centos 6.3安装libmcrypt-2.5.8不成功解决方案

明明安装成功好了&#xff0c;但是在安装mysql或者其他的mcrypt时就报错&#xff0c;说没有安装libmcrypt。。。 解决方法&#xff1a; ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.laln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.soln -s /usr/local/lib…

[原] XAF How to implement a custom attribute to customize the Application Model

http://www.devexpress.com/Support/Center/Example/Details/E1679转载于:https://www.cnblogs.com/Tonyyang/p/3387234.html

简单聊下.NET6 Minimal API的使用方式

前言随着.Net6的发布&#xff0c;微软也改进了对之前ASP.NET Core构建方式&#xff0c;使用了新的Minimal API模式。之前默认的方式是需要在Startup中注册IOC和中间件相关&#xff0c;但是在Minimal API模式下你只需要简单的写几行代码就可以构建一个ASP.NET Core的Web应用&…

栈和队列之用java实现栈

介绍; 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又…

那些不回你微信的人都在看什么?

如何成为一个“聊得开”的人&#xff1f;如何丰富空闲时光&#xff1f;如何在短时间内获取最最专业的文化、艺术资讯&#xff1f;小编给大家推荐几个公众号它们有趣有颜有料长按二维码&#xff0c;选择“识别图中二维码”关注印客美学id&#xff1a;inkbetter△长按二维码“识别…

按照学号查找学生_[源码和文档分享]基于JAVA和MYSQL数据库的学生成绩管理系统...

一、需求分析本系统是学生成绩管理系统&#xff0c;所以应该做到可以录入学生成绩&#xff0c;修改学生成绩&#xff0c;删除学生成绩&#xff0c;查询学生成绩&#xff0c;以及最后的所有学生按照GPA排名。本系统的数据来源期末考试成绩&#xff0c;用来实现录入&#xff0c;查…

NATS服务器部署及测试

版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/51002444 NATS服务器部署及测试 作者&#xff1a;chszs&#xff0c;未经博主允许不得转载。经许可的转载需注明作者和博客主页&#xff1a;htt…

wdcp服务器/虚拟主机管理系统,wdcp服务器/虚拟主机管理系统1.1发布(最后更新20110423)...

wdcp服务器/虚拟主机管理系统1.1发布 (最后更新20110423,查看更新日志)wdcp (WDlinux Control Panel) 是一套用PHP开发的Linux服务器管理系统,旨在易于使用和管理Linux服务器,可以在线通过网页管理服务器和虚拟主机.简单,方便,易操作.只有Linux版本,没有windows版本,让你方便地…