3.3、客户端编译生成GRPC类

1. 在“解决方案资源管理器”中,使用鼠标左键选中项目名称“Demo.Grpc.Cmd”,然后单击鼠标右键,在弹出的快捷菜单中选择“重新生成”菜单项。

2. 在“解决方案资源管理器”中,使用鼠标左键选中项目名称“Demo.Grpc.Cmd,在弹出的快捷菜单中选择“在文件资源管理器中打开文件夹”菜单项。如下图。

3.我们打开“文件资源管理器”,进入到Demo.Grpc.Cmd\obj\Debug\ net7.0目录,发现此时目录下也有与服务端一样的4个.cs文件,就是GRPC协议文件对应的类文件,如下图所示:

3.4、gRPC服务的https调用

1.在服务端项目(Demo.GrpcService)中,由Visual Studio 2022在创建项目时默认配置了两个地址,让我们来调用。2个地址分别为:http://localhost:5209https://localhost:7149, gRPC客户端会使用到这2个地址,目的是给客户端请求请求地址,服务端将监听这两个端口。

2. 在Visual Studio 2022的“解决方案资源管理器”中,使用鼠标右键单击“Demo.Grpc.Cmd”项目名称,在弹出菜单中选择“添加--> 类”。 在“添加新项”对话框中将类命名为 User,然后选择“添加”。

3. 在Visual Studio 2022的“解决方案资源管理器”中,使用鼠标双击打开刚才创建的User.cs文件,添加如下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using Grpc.Net.Client;
using Demo.GrpcService.Protos; namespace Demo.Grpc.Cmd
{ public class User { public void GetUserInfo()
{ // 使用https
const string urlHttps = "https://localhost:7149"; using (var channel = GrpcChannel.ForAddress(urlHttps))
{ var client = new UserInfo.UserInfoClient(channel); UserInfoResult userInfo = client.GetUserInfo(new UserInfoRequest()
{
UserName = "Admin", Password = "12345" }); //打印服务方法返回的结果
Console.WriteLine($"{userInfo.UserName},{userInfo.Age},{userInfo.Name}");
Console.WriteLine( JsonSerializer.Serialize(userInfo));
} // return string.Empty;
Console.ReadKey(); }
}
}

4. 在Visual Studio 2022的“解决方案资源管理器”中,使用鼠标双击打开program.cs文件,添加如下代码:

/ 、See https://aka.ms/new-console-template for more information

using Demo.Grpc.Cmd;

Console.WriteLine("Hello, World!"); 

new User().GetUserInfo();

5.我们在开启一个Visual Studio 2022,打开“Demo.GrpcService”解决方案,将“Demo.GrpcService”设置为启动项目,并使用https协议启动运行。

6.启动运行之后的结果如图。

7.我们切换到“Demo.Grpc.Cmd”为启动项目Visual Studio 2022,按F5,启动。

8.启动之后的运行结果,如图。

到此,调用gRPC服务端提供的https地址就成功了。

3.5、gRPC服务的http调用

相比https的调用,我们只需要在调用前加上如下代码即可:

AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);

1. 在Visual Studio 2022的“解决方案资源管理器”中,使用鼠标双击打开User.cs文件,添加如下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using Grpc.Net.Client;
using Demo.GrpcService.Protos; namespace Demo.Grpc.Cmd
{
public class User
{ public void GetUserInfo()
{
//使用http
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
const string urlHttp = "http://localhost:5209"; using (var channel = GrpcChannel.ForAddress(urlHttp))
// 使用https
// const string urlHttps = "https://localhost:7149";
// using (var channel = GrpcChannel.ForAddress(urlHttps))
{ var client = new UserInfo.UserInfoClient(channel); UserInfoResult userInfo = client.GetUserInfo(new UserInfoRequest()
{
UserName = "Admin",
Password = "12345" }); //打印服务方法返回的结果
Console.WriteLine($"{userInfo.UserName},{userInfo.Age},{userInfo.Name}");
Console.WriteLine( JsonSerializer.Serialize(userInfo));
} // return string.Empty;
Console.ReadKey();
}
}
}

2.在目Visual Studio 2022,按F5或是点击工具栏上的“运行”按钮,启动“Demo.Grpc.Cmd”控制台程序。

到此,调用gRPC服务端提供的http地址就成功了。

运行效果如下:

gRPC入门学习之旅(六)的更多相关文章

  1. Spring学习之旅(六)--SpringMVC集成

    对大多数 Java 开发来说,基于 web 的应用程序是我们主要的关注点. Spring 也提供了对于 web 的支持,基于 MVC 模式的 Spring MVC 能够帮助我们灵活和松耦合的完成 we ...

  2. Egret入门学习日记 --- 第六篇(书中 3.6~3.9节 内容)

    第六篇(书中 3.6~3.9节 内容) 在本篇写之前,还是要为昨天写的日记道歉才行,差点就误人子弟了. 没想到在程序员界最低级的错误 “单词拼写错误” 还是会经常犯. childrenCreated ...

  3. [原创] zabbix学习之旅六:如何解决zabbix server在内网,而邮件发送服务器在外网的问题

    通过前面的文章,你已经可以快速地搭建一个报警系统,并能正常的收到报警邮件了.不过在很多企业级环境下,邮件发送服务器往往放在外网,而zabbix server放置在内网,在这种情况下,zabbix的报警 ...

  4. 获取编译学习笔记 (六)—— si、di,双环

    疯狂暑期学习  汇编入门学习笔记 (六)-- si.di,双重循环 參考: <汇编语言> 王爽 第7章 1. and和or指令,与[bx+idata] and和or.就不多说了. [bx+ ...

  5. WCF学习之旅—WCF第二个示例(六)

    第五步,创建数据服务 在“解决方案资源管理器”中,使用鼠标左键选中“SCF.WcfService”项目,然后在菜单栏上,依次选择“项目”.“添加新项”. 在“添加新项”对话框中,选择“Web”节点,然 ...

  6. SCARA——OpenGL入门学习五六(三维变换、动画)

    OpenGL入门学习(五) 此课为三维变换的内容,比较枯燥.主要是因为很多函数在单独使用时都不好描述其效果, 在前面绘制几何图形的时候,大家是否觉得我们绘图的范围太狭隘了呢?坐标只能从-1到1,还只能 ...

  7. 【转载】salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建

    salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建   VisualForce封装了很多的标签用来进行页面设计,本篇主要讲述简单的页面增删改查.使用的内容和设计到前台页面使用的 ...

  8. WCF学习之旅—TcpTrace工具(二十六)

    止文(WCF学习之旅—TcpTrace工具(二十五))介绍了关于TcpTrance的一种使用方式,接下来介绍第二种使用方式. 三.通过ListenUri实现基于tcpTracer的消息路由 对于路由的 ...

  9. WCF学习之旅—第三个示例之三(二十九)

    上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) 在上一篇文章中我们创建了实体对象与接口协定,在这一篇文章中我们来学习如何创建WCF的服务端代码.具体步骤见下面. ...

  10. WCF学习之旅—WCF服务部署到应用程序(十)

    上接  WCF学习之旅—WCF寄宿前的准备(八) WCF学习之旅—WCF服务部署到IIS7.5(九) 五.控制台应用程序宿主 (1) 在解决方案下新建控制台输出项目 ConsoleHosting.如下 ...

随机推荐

  1. 一: Mysql字符集问题

    ## Mysql 字符集问题 1 修改MySQL5.7字符集 1.1 修改步骤 在MySQL 8.0版本之前,默认字符集为 latin1 ,utf8字符集指向的是 utf8mb3 .网站开发人员在数据 ...

  2. RocketMQ(9) 消息堆积与消费延迟

    消息堆积与消费延迟 1 概念 消息处理流程中,如果Consumer的消费速度跟不上Producer的发送速度,MQ中未处理的消息会越来越多(进的多出的少),这部分消息就被称为堆积消息.消息出现堆积进而 ...

  3. java.util.Arrays 快速学习教程

    在 Java 中,java.util.Arrays类提供的多种数组操作功能,可以有效地执行各种数组相关的操作,使得数组处理变得简单和高效. 打印数组 String[] arr = new String ...

  4. 计算引擎-Presto

    概述 参考 高质量: B站:https://mp.weixin.qq.com/s/9_lSIFSw5o8sFC8foEtA7w https://mp.weixin.qq.com/s/NmTaJjE0U ...

  5. WPF之命令

    目录 命令系统的基本元素 基本元素之间的关系 小试命令 WPF的命令库 命令参数 命令与Binding的结合 近观命令 ICommand接口与RoutedCommand 自定义Command 定义命令 ...

  6. C#串口开发之SerialPort类封装

    目录 SerialPort类 参数封装 控件操作封装 SerialPortClient类实现 SerialPortClient类使用 测试Demo 参考文章 SerialPort类 微软在.NET中对 ...

  7. 解决 Steam for Linux 部分 Valve 游戏中文显示问题/军团要塞2的字体显示问题

    解决 Steam for Linux 部分 Valve 游戏中文显示问题 发表于 Apr 7th 2019 | 分类于 Keep Digging Steam for Linux 上有许多好玩的免费游戏 ...

  8. AWS ES ISM学习应用笔记

    Elastic Search 6以上版本推出 ILM,用于管理Index的生命周期,但AWS上的ES是基于OSS版本的ES,所以自己开发了ISM来代替ILM.项目是从logstash往ES写入数据,但 ...

  9. 后端基础PHP—正则表达

    后端基础PHP-正则表达式 1.正则表达式的介绍 2.正则表达式的语法 一.正则表达式的介绍 正则表达式的介绍 · 正则表达式,又称规则表达式,通过一种特殊的语言来挑选符合条件的数据 · 在代码中简写 ...

  10. day03-功能实现03

    功能实现03 9.功能08-分页显示 9.1需求分析 将查询的数据进行分页显示,要求功能如下: 显示共多少条记录 可以设置每页显示几条 点击第几页,显示对应的数据 9.2思路分析 后端使用MyBati ...