gRPC入门学习之旅(九)

grpc · 浏览次数 : 0

小编点评

```csharp # gRPC入门学习之旅目录  gRPC入门学习之旅(一) gRPC入门学习之旅(二) gRPC入门学习之旅(三) gRPC入门学习之旅(四) gRPC入门学习之旅(七) **3.10、客户端编译生成GRPC类1. 在“解决方案资源管理器”中,使用鼠标左键选中项目名称“Demo.Grpc.Common”,然后单击鼠标右键,在弹出的快捷菜单中选择“重新生成”菜单项。** 2. 在“解决方案资源管理器”中,使用鼠标左键选中项目名称“Demo.Grpc.Common,在弹出的快捷菜单中选择“在文件资源管理器中打开文件夹”菜单项。如下图。 ``` file resource manager |--- Demo.Grpc.Common\\obj\\Debug\\ net7.0 |-- User.cs |-- UserInfo.proto |-- UserInfoRequest.proto |-- UserInfoResult.proto ``` 3.我们打开“文件资源管理器”,进入到Demo.Grpc.Common\\obj\\Debug\\ 目录,发现此时目录下也有与服务端一样的4个.cs文件,就是GRPC协议文件对应的类文件,如下图所示: ``` 3.11、gRPC服务的https调用1.在服务端项目(Demo.GrpcService)中,由Visual Studio 2022在创建项目时默认配置了两个地址,让我们来调用。 2个地址分别为:http://localhost:5209和https://localhost:7149, gRPC客户端会使用到这2个地址,目的是给客户端请求请求地址,服务端将监听这两个端口。 ``` 4. 在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.Client{ public class User { public string 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}\"); return JsonSerializer.Serialize(userInfo); } return string.Empty; } } }  ``` 5. 在Visual Studio 2022的“解决方案资源管理器”中,使用鼠标双击打开windows.xmal.cs文件,添加如下代码: ```using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Navigation; using System.Windows.Shapes; namespace Demo.Grpc.Client{ /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void btnGetUserInfo_Click(object sender, RoutedEventArgs e) { User usr = new User(); txtMsg.Text = usr.GetUserInfo(); } }} ``` 6. 在Visual Studio 2022,按F5,启动。会弹出如下图的错误信息。 ``` Grpc.Net.Client.RpcException (Status = Grpc.Status.Internal); - System.Net.Sockets.SocketException (SocketException: The requested address is not valid.) - System.Net.Sockets.SocketException (SocketException: Invalid argument. Argument is invalid for the method.) ``` 7.在Visual Studio 2022中将“Demo.Grpc.Client”项目中的Protos目录删除。 8.在Visual Studio 2022中将“Demo.Grpc.Client”项目中的“依赖项”设置成“解决方案资源管理器”。 9.在解决方案资源管理器中,找到“Grpc.Net.Client.GrpcChannel.ForAddress”项,并将“Address”属性设置为“localhost:5209”。 10.在解决方案资源管理器中,找到“Grpc.Net.Client.GrpcChannel.ForAddress”项,并将“Name”属性设置为“MyChannel”。 11.在解决方案资源管理器中,找到“Grpc.Net.Client.ChannelFactory.CreateChannel”项,并将“Address”属性设置为“localhost:7149”。 12.在解决方案资源管理器中,找到“Grpc.Net.Client.ChannelFactory.CreateChannel”项,并将“Name”属性设置为“MyChannel”。 13.在解决方案资源管理器中,找到“Grpc.Net.Client.ChannelFactory.CreateChannel”项,并将“ChannelFactory”属性设置为“MyChannel”。 14.在解决方案资源管理器中,找到“Grpc.Net.Client.Client.GetUserChannel”项,并将“ChannelName”属性设置为“MyChannel”。 15.在解决方案资源管理器中,找到“Grpc.Net.Client.Client.GetUserChannel”项,并将“ChannelName”属性设置为“MyChannel”。 16.在解决方案资源管理器中,找到“Grpc.Net.Client.Client.GetUserChannel”项,并将“ChannelName”属性设置为“MyChannel”。 17.运行程序,调用gRPC服务端的https地址就成功了。 ``` 归纳总结以上内容,生成内容时需要带简单的排版

正文

 gRPC入门学习之旅(一)

 

3.10、客户端编译生成GRPC类

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

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

 

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

3.11、gRPC服务的https调用

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

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

        public class User
        {

            public string 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}");
                return JsonSerializer.Serialize(userInfo);
            }

            return string.Empty;
        }

        }

    }

 

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 

namespace Demo.Grpc.Client
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>

    public partial class MainWindow : Window
    {

        public MainWindow()
        {

            InitializeComponent();

        }

        private void btnGetUserInfo_Click(object sender, RoutedEventArgs e)
        {

            User usr = new User();
            txtMsg.Text = usr.GetUserInfo();

        }

    }

}
 

5.在Visual Studio 2022,按F5,启动。会弹出如下图的错误信息。

 

6.在Visual Studio 2022中将“Demo.Grpc.Client”项目中的Protos目录删除。

7. 在Visual Studio 2022中将“Demo.Grpc.Client”项目中的“依赖项”中点击右键,在弹出菜单中选择“添加项目引用”。在弹出的“引用管理器”中选择“Demo.Grpc.Common”,然后点击“确定”按钮。如下图。

8.Demo.Grpc.Client项目经过上述步骤之后,项目结构如下图。

9.在Visual Studio 2022中按钮 F5,或点击工具栏上的“运行”按钮,启动Demo.Grpc.Client应用程序。此次应用程序运行正常,出现了窗口,如下图,点击“用户信息”按钮,调用gRPC服务端提供的https地址就成功了。

 

 

 

 

 

 

与gRPC入门学习之旅(九)相似的内容:

gRPC入门学习之旅(九)

gRPC是一个高性能、通用的开源远程过程调用(RPC)框架,基于底层HTTP/2协议标准和协议层Protobuf序列化协议开发, gRPC 客户端和服务端可以在多种环境中运行和交互。你可以用Java创建一个 gRPC 服务端,用 Go、Python、C# 来创建客户端。本系统文章详细描述了如何创建一...

gRPC入门学习之旅(十)

gRPC是一个高性能、通用的开源远程过程调用(RPC)框架,基于底层HTTP/2协议标准和协议层Protobuf序列化协议开发, gRPC 客户端和服务端可以在多种环境中运行和交互。你可以用Java创建一个 gRPC 服务端,用 Go、Python、C# 来创建客户端。本系统文章详细描述了如何创建一...

gRPC入门学习之旅(八)

gRPC是一个高性能、通用的开源远程过程调用(RPC)框架,基于底层HTTP/2协议标准和协议层Protobuf序列化协议开发, gRPC 客户端和服务端可以在多种环境中运行和交互。你可以用Java创建一个 gRPC 服务端,用 Go、Python、C# 来创建客户端。本系统文章详细描述了如何创建一...

Asp-Net-Core学习笔记:gRPC快速入门

## 前言 此前,我在做跨语言调用时,用的是 Facebook 的 Thrift,挺轻量的,还不错。 >Thrift是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务。它被当作一个远程过程调用(RPC)框架来使用,是由Facebook为“大规模跨语言服务开发”而开发的。它通过一个代码

gRPC入门

1. gRPC简介 gRPC是一种高性能、开源和通用的远程过程调用(RPC)框架,由Google开源并维护。它使用Protocol Buffers(protobuf)作为接口定义语言(IDL),提供跨平台、跨语言的RPC调用支持。gRPC具有以下几个特点: 高性能:使用HTTP/2协议,支持多路复用

[转帖]gRPC Load Balancing

https://www.cnblogs.com/charlieroro/p/14312362.html 翻译自:https://grpc.io/blog/grpc-load-balancing/ 这是gRPC负载均衡的第一篇,后续会给出基于golang XDS服务发现的例子,了解golang XDS

GRPC与 ProtoBuf 的理解与总结

转载请注明出处: 1.GRPC 官网:https://www.grpc.io/ gRPC 官方文档中文版:http://doc.oschina.net/grpc RPC 框架的目标就是让远程服务调用更加简单、透明,其负责屏蔽底层的传输方式(TCP/UDP)、序列化方式(XML/Json)和通信细节。

文盘Rust -- tonic-Rust grpc初体验

gRPC 是开发中常用的开源高性能远程过程调用(RPC)框架,tonic 是基于 HTTP/2 的 gRPC 实现,专注于高性能、互操作性和灵活性。该库的创建是为了对 async/await 提供一流的支持,并充当用 Rust 编写的生产系统的核心构建块。今天我们聊聊通过使用tonic 调用grpc的的具体过程。

gRPC vs. HTTP:网络通信协议的对比

## 概述 gRPC 和 HTTP 是两种常见的网络通信协议,用于在客户端和服务器之间进行通信。它们具有不同的特点和适用场景,下面对它们进行详细比较。 ## HTTP(Hypertext Transfer Protocol) ### 特点: 1. **简单易用**:HTTP 使用简单的请求方法和状态

gRPC如何保障数据安全传输

## 什么是 gRPC? gRPC 是由 Google 开发的高性能、开源的 RPC(Remote Procedure Call)框架,用于在客户端和服务器之间进行通信。它基于 Protocol Buffers(protobuf)进行消息序列化和反序列化,支持多种通信协议,如 HTTP/2、TCP